From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quentin Schulz Subject: [PATCH 1/2] staging: net: wireless: add ESP8089 WiFi driver Date: Fri, 21 Jul 2017 16:35:01 +0200 Message-ID: <20170721143502.1991-2-quentin.schulz@free-electrons.com> References: <20170721143502.1991-1-quentin.schulz@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170721143502.1991-1-quentin.schulz@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: ulf.hansson@linaro.org, gregkh@linuxfoundation.org Cc: devel@driverdev.osuosl.org, hdegoede@redhat.com, baolin.wang@linaro.org, linus.walleij@linaro.org, linux-mmc@vger.kernel.org, adrian.hunter@intel.com, linux-kernel@vger.kernel.org, Quentin Schulz , wens@csie.org, icenowy@aosc.xyz, maxime.ripard@free-electrons.com, shawn.lin@rock-chips.com List-Id: linux-mmc@vger.kernel.org VGhlIEVzcHJlc3NpZiBFU1A4MDg5IFdpRmkgY2hpcHMgY2FuIGJlIG9mdGVuIGZvdW5kIGluIGNo ZWFwIHRhYmxldHMuClRoZXJlIGlzIG9uZSBpbiBBMjMgUG9sYXJvaWQgdGFibGV0cyBmb3IgZXhh bXBsZS4KClRoZSBjaGlwIGlzIG9mdGVuIGVtYmVkZGVkIGFzIGFuIGVNTUMgU0RJTyBkZXZpY2Uu CgpUaGUgY29kZSB3YXMgdGFrZW4gZnJvbSBhbiBvdXQtb2YtdHJlZSByZXBvc2l0b3J5IGFuZCBo YXMgc2VlbiBhIGZpcnN0CnBhc3MgaW4gdGhlIGNsZWFudXAgcHJvY2Vzcy4KCkF0IHRoZSBtb21l bnQsIHRoZXJlIGlzIG5vIHB1YmxpY2x5IGF2YWlsYWJsZSBkYXRhc2hlZXQgZm9yIHRoaXMgY2hp cC4KCkNjOiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgpDYzogSWNlbm93eSBa aGVuZyA8aWNlbm93eUBhb3NjLnh5ej4KU2lnbmVkLW9mZi1ieTogUXVlbnRpbiBTY2h1bHogPHF1 ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KLS0tCiBkcml2ZXJzL3N0YWdpbmcvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBkcml2ZXJzL3N0YWdpbmcvTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9L Y29uZmlnICAgICAgICAgICAgIHwgICAxMyArCiBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9NYWtl ZmlsZSAgICAgICAgICAgIHwgICAgNyArCiBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfY3Ry bC5jICAgICAgICAgIHwgIDUyNyArKysrKysrKwogZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNw X2N0cmwuaCAgICAgICAgICB8ICAgNDggKwogZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2Rl YnVnLmMgICAgICAgICB8ICAyNDcgKysrKwogZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2Rl YnVnLmggICAgICAgICB8ICAgNjkgKysKIGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9maWxl LmMgICAgICAgICAgfCAgMjIxICsrKysKIGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9maWxl LmggICAgICAgICAgfCAgIDMwICsKIGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9pbml0X2Rh dGEuaCAgICAgfCAgIDE3ICsKIGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9pby5jICAgICAg ICAgICAgfCAgMjk0ICsrKysrCiBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfbWFjODAyMTEu YyAgICAgIHwgMTQ5NiArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9zdGFnaW5nL2Vz cDgwODkvZXNwX21hYzgwMjExLmggICAgICB8ICAgMzMgKwogZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX21haW4uYyAgICAgICAgICB8ICAxOTkgKysrKwogZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX3B1Yi5oICAgICAgICAgICB8ICAxODggKysrCiBkcml2ZXJzL3N0YWdpbmcvZXNwODA4 OS9lc3Bfc2lmLmggICAgICAgICAgIHwgIDEzMSArKwogZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX3NpcC5jICAgICAgICAgICB8IDE3MTggKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfc2lwLmggICAgICAgICAgIHwgIDE1MCArKysKIGRy aXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF91dGlscy5jICAgICAgICAgfCAgMTMzICsrKwogZHJp dmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3V0aWxzLmggICAgICAgICB8ICAgMjcgKwogZHJpdmVy cy9zdGFnaW5nL2VzcDgwODkvZXNwX3dsLmggICAgICAgICAgICB8ICAgMzUgKwogZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvZXNwX3dtYWMuaCAgICAgICAgICB8ICAgODcgKysKIGRyaXZlcnMvc3Rh Z2luZy9lc3A4MDg5L3NkaW9fc2lmX2VzcC5jICAgICAgfCAgNTUyICsrKysrKysrKwogZHJpdmVy cy9zdGFnaW5nL2VzcDgwODkvc2lwMl9jb21tb24uaCAgICAgICB8ICAzODggKysrKysrCiBkcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9zbGNfaG9zdF9yZWdpc3Rlci5oIHwgIDI2MyArKysrCiAyNiBm aWxlcyBjaGFuZ2VkLCA2ODc2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9lc3BfY3RybC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5n L2VzcDgwODkvZXNwX2N0cmwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L2VzcF9kZWJ1Zy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2Vz cDgwODkvZXNwX2RlYnVnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNw ODA4OS9lc3BfZmlsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX2ZpbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5 L2VzcF9pbml0X2RhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF9pby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX21hYzgwMjExLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4 OS9lc3BfbWFjODAyMTEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF9tYWluLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4 OS9lc3BfcHViLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9l c3Bfc2lmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bf c2lwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfc2lw LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF91dGlscy5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3dsLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfd21hYy5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2Rpb19zaWZfZXNwLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9zaXAyX2NvbW1vbi5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2xjX2hvc3RfcmVnaXN0 ZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFn aW5nL0tjb25maWcKaW5kZXggZTk3ZDcyZTNiYzQwLi4wYmQwMDc4Mzc0MjkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBA IC0xMTQsNCArMTE0LDYgQEAgc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL0tjb25m aWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BpNDMzL0tjb25maWciCiAKK3NvdXJjZSAi ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvS2NvbmZpZyIKKwogZW5kaWYgIyBTVEFHSU5HCmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZp bGUKaW5kZXggOTkzZWQwYzE1NTZjLi4yM2NmYTEyNThjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv c3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTQ2LDMg KzQ2LDQgQEAgb2JqLSQoQ09ORklHX0JDTTI4MzVfVkNISVEpCSs9IHZjMDRfc2VydmljZXMvCiBv YmotJChDT05GSUdfQ1JZUFRPX0RFVl9DQ1JFRSkJKz0gY2NyZWUvCiBvYmotJChDT05GSUdfRFJN X1ZCT1hWSURFTykJKz0gdmJveHZpZGVvLwogb2JqLSQoQ09ORklHX1BJNDMzKQkJKz0gcGk0MzMv CitvYmotJChDT05GSUdfRVNQODA4OSkJCSs9IGVzcDgwODkvCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvZXNwODA4OS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvS2NvbmZp ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhmZGQ4ZmE4MjhhZAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L0tjb25maWcKQEAgLTAs MCArMSwxMyBAQAorY29uZmlnIEVTUDgwODkKKwl0cmlzdGF0ZSAiRXNwcmVzc2lmIEVTUDgwODkg U0RJTyBXaUZpIgorCWRlcGVuZHMgb24gTUFDODAyMTEKKwktLS1oZWxwLS0tCisJICBFU1A4MDg5 IGlzIGEgbG93LWJ1ZGdldCAyLjRHSHogV2lGaSBjaGlwIGJ5IEVzcHJlc3NpZiwgdXNlZCBpbiBt YW55CisJICBjaGVhcCB0YWJsZXRzIHdpdGggQWxsd2lubmVyIG9yIFJvY2tjaGlwIFNvQworCitj b25maWcgRVNQODA4OV9ERUJVR19GUworCWJvb2wgIkVuYWJsZSBEZWJ1Z0ZTIHN1cHBvcnQgZm9y IEVTUDgwODkiCisJZGVwZW5kcyBvbiBFU1A4MDg5CisJZGVmYXVsdCB5CisJLS0taGVscC0tLQor CSAgRGVidWdGUyBzdXBwb3J0IGZvciBFU1A4MDg5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L01ha2VmaWxlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODI3YzY2ZDhiNWQ1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvTWFrZWZpbGUKQEAgLTAsMCAr MSw3IEBACitNT0RVTEVfTkFNRSA9IGVzcDgwODkKKworJChNT0RVTEVfTkFNRSkteSA6PSBlc3Bf ZGVidWcubyBzZGlvX3NpZl9lc3AubyBlc3BfaW8ubyBcCisgICAgZXNwX2ZpbGUubyBlc3BfbWFp bi5vIGVzcF9zaXAubyBlc3BfY3RybC5vIFwKKyAgICBlc3BfbWFjODAyMTEubyBlc3BfZGVidWcu byBlc3BfdXRpbHMubworCitvYmotJChDT05GSUdfRVNQODA4OSkgOj0gZXNwODA4OS5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfY3RybC5jIGIvZHJpdmVycy9zdGFn aW5nL2VzcDgwODkvZXNwX2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmU1YTk1ZTdiMzEzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L2VzcF9jdHJsLmMKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMDkgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJl ZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUt ZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVk ZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8 bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGlu dXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImVzcF9pbml0X2RhdGEuaCIKKyNpbmNsdWRlICJl c3BfcHViLmgiCisjaW5jbHVkZSAiZXNwX3NpcC5oIgorI2luY2x1ZGUgImVzcF9jdHJsLmgiCisj aW5jbHVkZSAiZXNwX3NpZi5oIgorI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgorI2luY2x1ZGUgImVz cF93bWFjLmgiCisjaW5jbHVkZSAiZXNwX3V0aWxzLmgiCisjaW5jbHVkZSAiZXNwX3dsLmgiCisj aW5jbHVkZSAiZXNwX2ZpbGUuaCIKKyNpbmNsdWRlICJlc3BfdmVyc2lvbi5oIgorCisjZGVmaW5l IERSSVZFUl9WRVIgMHhiZGY1MDg3YzNkZWJsbAorCitzdGF0aWMgdm9pZCBlc3BfdHhfYmFfc2Vz c2lvbl9vcChzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3QgZXNwX25vZGUgKm5vZGUsCisJCQkJ IGVudW0gdHJjX2FtcGR1X3N0YXRlIHN0YXRlLCB1OCB0aWQpCit7CisJc3RydWN0IGVzcF90eF90 aWQgKnR4dGlkID0gJm5vZGUtPnRpZFt0aWRdOworCisJaWYgKHN0YXRlICE9IFRSQ19UWF9BTVBE VV9TVE9QUEVEICYmIHN0YXRlICE9IFRSQ19UWF9BTVBEVV9PUEVSQVRJT05BTCkKKwkJcmV0dXJu OworCisJaWYgKHN0YXRlID09IFRSQ19UWF9BTVBEVV9TVE9QUEVEKSB7CisJCWlmICh0eHRpZC0+ c3RhdGUgIT0gRVNQX1RJRF9TVEFURV9PUEVSQVRJT05BTCkgeworCQkJZGV2X2VycihzaXAtPmVw dWItPmRldiwKKwkJCQkiJXMgdGlkICVkIFRYQU1QRFUgR09UIFNUT1AgRVZUIElOIFdST05HIFNU QVRFICVkXG4iLAorCQkJCV9fZnVuY19fLCB0aWQsIHR4dGlkLT5zdGF0ZSk7CisJCQlyZXR1cm47 CisJCX0KKworCQlkZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LAkiJXMgdGlkICVkIFRYQU1QRFUgR09U IFNUT1AgRVZUXG4iLAorCQkJX19mdW5jX18sIHRpZCk7CisKKwkJc3Bpbl9sb2NrX2JoKCZzaXAt PmVwdWItPnR4X2FtcGR1X2xvY2spOworCQl0eHRpZC0+c3RhdGUgPSBFU1BfVElEX1NUQVRFX1dB SVRfU1RPUDsKKwkJc3Bpbl91bmxvY2tfYmgoJnNpcC0+ZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisK KwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihub2RlLT5zdGEsICh1MTYpdGlkKTsKKwkJ cmV0dXJuOworCX0KKworCWlmICh0eHRpZC0+c3RhdGUgPT0gRVNQX1RJRF9TVEFURV9TVE9QKSB7 CisJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsCSIlcyB0aWQgJWQgVFhBTVBEVSBHT1QgT1BFUkFU SU9OQUxcbiIsCisJCQlfX2Z1bmNfXywgdGlkKTsKKworCQlzcGluX2xvY2tfYmgoJnNpcC0+ZXB1 Yi0+dHhfYW1wZHVfbG9jayk7CisJCXR4dGlkLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVfVFJJR0dF UjsKKwkJc3Bpbl91bmxvY2tfYmgoJnNpcC0+ZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisKKwkJaWVl ZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24obm9kZS0+c3RhLCAodTE2KXRpZCwgMCk7CisJCXJl dHVybjsKKwl9IGVsc2UgaWYgKHR4dGlkLT5zdGF0ZSA9PSBFU1BfVElEX1NUQVRFX09QRVJBVElP TkFMKSB7CisJCXNpcF9zZW5kX2FtcGR1X2FjdGlvbihzaXAtPmVwdWIsIFNJUF9BTVBEVV9UWF9P UEVSQVRJT05BTCwKKwkJCQkgICAgICBub2RlLT5zdGEtPmFkZHIsIHRpZCwgbm9kZS0+aWZpZHgs IDApOworCQlyZXR1cm47CisJfQorCisJZGV2X2VycihzaXAtPmVwdWItPmRldiwKKwkJIiVzIHRp ZCAlZCBUWEFNUERVIEdPVCBPUEVSQVRJT05BTCBFVlQgSU4gV1JPTkcgU1RBVEUgJWRcbiIsCisJ CV9fZnVuY19fLCB0aWQsIHR4dGlkLT5zdGF0ZSk7Cit9CisKK2ludCBzaXBfcGFyc2VfZXZlbnRz KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHU4ICpidWYpCit7CisJc3RydWN0IHNpcF9oZHIgKmhkciA9 IChzdHJ1Y3Qgc2lwX2hkciAqKWJ1ZjsKKwlzdHJ1Y3Qgc2lwX2V2dF9ib290dXAyICpib290dXBf ZXZ0OworCXN0cnVjdCBzaXBfZXZ0X3NjYW5fcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IHNpcF9l dnRfcm9jICpyb2M7CisJc3RydWN0IHNpcF9ldnRfdHJjX2FtcGR1ICphbXBkdTsKKwlzdHJ1Y3Qg c2lwX2V2dF9ub2lzZWZsb29yICpub2lzZWZsb29yOworCXN0cnVjdCBlc3Bfbm9kZSAqbm9kZTsK KwljaGFyICplcDsKKwl1OCAqcDsKKwl1MTYgKmxlbjsKKwlpbnQgaTsKKworCXN3aXRjaCAoaGRy LT5jX2V2dGlkKSB7CisJY2FzZSBTSVBfRVZUX1RBUkdFVF9PTjoKKwkJLyogdXNlIHJ4IHdvcmsg cXVldWUgdG8gc2VuZC4uLiAqLworCQlpZiAoYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUpID09IFNJ UF9QUkVQQVJFX0JPT1QgfHwKKwkJICAgIGF0b21pY19yZWFkKCZzaXAtPnN0YXRlKSA9PSBTSVBf Qk9PVCkgeworCQkJYXRvbWljX3NldCgmc2lwLT5zdGF0ZSwgU0lQX1NFTkRfSU5JVCk7CisJCQlx dWV1ZV93b3JrKHNpcC0+ZXB1Yi0+ZXNwX3drcSwgJnNpcC0+cnhfcHJvY2Vzc193b3JrKTsKKwkJ CWJyZWFrOworCQl9CisJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsCSIlcyBib290IGR1cmluZyB3 cm9uZyBzdGF0ZSAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmc2lwLT5zdGF0ZSkp OworCQlicmVhazsKKworCWNhc2UgU0lQX0VWVF9CT09UVVA6CisJCWJvb3R1cF9ldnQgPSAoc3Ry dWN0IHNpcF9ldnRfYm9vdHVwMiAqKShidWYgKyBTSVBfQ1RSTF9IRFJfTEVOKTsKKworCQlrZnJl ZShzaXAtPnJhd2J1Zik7CisKKwkJc2lwX3Bvc3RfaW5pdChzaXAsIGJvb3R1cF9ldnQpOworCQlp ZiAoZ2xfYm9vdHVwX2NwbHgpCisJCQljb21wbGV0ZShnbF9ib290dXBfY3BseCk7CisKKwkJYnJl YWs7CisKKwljYXNlIFNJUF9FVlRfUkVTRVRUSU5HOgorCQlzaXAtPmVwdWItPndhaXRfcmVzZXQg PSAxOworCQlpZiAoZ2xfYm9vdHVwX2NwbHgpCisJCQljb21wbGV0ZShnbF9ib290dXBfY3BseCk7 CisJCWJyZWFrOworCisJY2FzZSBTSVBfRVZUX1NDQU5fUkVTVUxUOgorCQlpZiAoIWF0b21pY19y ZWFkKCZzaXAtPmVwdWItPndsLm9mZikpIHsKKwkJCXJlcG9ydCA9IChzdHJ1Y3Qgc2lwX2V2dF9z Y2FuX3JlcG9ydCAqKShidWYgKyBTSVBfQ1RSTF9IRFJfTEVOKTsKKwkJCXNpcF9zY2FuZG9uZV9w cm9jZXNzKHNpcCwgcmVwb3J0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2X2VycihzaXAtPmVw dWItPmRldiwJIiVzIHNjYW4gcmVzdWx0IHdoaWxlIHdsYW4gb2ZmXG4iLAorCQkJX19mdW5jX18p OworCQlicmVhazsKKworCWNhc2UgU0lQX0VWVF9ST0M6CisJCXJvYyA9IChzdHJ1Y3Qgc2lwX2V2 dF9yb2MgKikoYnVmICsgU0lQX0NUUkxfSERSX0xFTik7CisJCWVzcF9yb2Nkb25lX3Byb2Nlc3Mo c2lwLT5lcHViLT5odywgcm9jKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJUF9FVlRfU05QUklOVEZf VE9fSE9TVDoKKwkJcCA9IGJ1ZiArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikgKyBzaXplb2YodTE2 KTsKKwkJbGVuID0gKHUxNiAqKShidWYgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsKKwkJZGV2 X2RiZyhzaXAtPmVwdWItPmRldiwgImVzcF9ob3N0OiVsbHhcbmVzcF90YXJnZXQ6ICUuKnNcbiIs CisJCQlEUklWRVJfVkVSLCAqbGVuLCBwKTsKKworCQlpZiAoISpsZW4gfHwgc2lwLT5lcHViLT5z ZGlvX3N0YXRlICE9IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpCisJCQlicmVhazsKKworCQlk ZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LAorCQkJIlNOUFJJTlRGIFRPIEhPU1Q6IGVzcF9ob3N0OiVs bHhcbmVzcF90YXJnZXQ6ICUuKnNcbiIsCisJCQlEUklWRVJfVkVSLCAqbGVuLCBwKTsKKwkJYnJl YWs7CisKKwljYXNlIFNJUF9FVlRfVFJDX0FNUERVOgorCQlpZiAoYXRvbWljX3JlYWQoJnNpcC0+ ZXB1Yi0+d2wub2ZmKSkgeworCQkJZGV2X2VycihzaXAtPmVwdWItPmRldiwKKwkJCQkiJXMgc2Nh biByZXN1bHQgd2hpbGUgd2xhbiBvZmZcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisK KwkJYW1wZHUgPSAoc3RydWN0IHNpcF9ldnRfdHJjX2FtcGR1ICopKGJ1ZiArIFNJUF9DVFJMX0hE Ul9MRU4pOworCQlub2RlID0gZXNwX2dldF9ub2RlX2J5X2FkZHIoc2lwLT5lcHViLCBhbXBkdS0+ YWRkcik7CisJCWlmICghbm9kZSkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsr KQorCQkJaWYgKGFtcGR1LT50aWQgJiBCSVQoaSkpCisJCQkJZXNwX3R4X2JhX3Nlc3Npb25fb3Ao c2lwLCBub2RlLCBhbXBkdS0+c3RhdGUsCisJCQkJCQkgICAgIGkpOworCQlicmVhazsKKworCWNh c2UgU0lQX0VWVF9JTklUX0VQOgorCQllcCA9IChjaGFyICopKGJ1ZiArIFNJUF9DVFJMX0hEUl9M RU4pOworCQlkZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LCAiUGh5IEluaXQ6ICVzXG4iLCBlcCk7CisJ CWJyZWFrOworCisJY2FzZSBTSVBfRVZUX05PSVNFRkxPT1I6CisJCW5vaXNlZmxvb3IgPSAoc3Ry dWN0IHNpcF9ldnRfbm9pc2VmbG9vciAqKShidWYgKyBTSVBfQ1RSTF9IRFJfTEVOKTsKKwkJYXRv bWljX3NldCgmc2lwLT5ub2lzZV9mbG9vciwgbm9pc2VmbG9vci0+bm9pc2VfZmxvb3IpOworCQli cmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBG SVhNRTogdWdseSBhZiAqLwordm9pZCBzaXBfc2VuZF9jaGlwX2luaXQoc3RydWN0IGVzcF9zaXAg KnNpcCkKK3sKKwlzaXplX3Qgc2l6ZSA9IHNpemVvZihlc3BfaW5pdF9kYXRhKTsKKworCWZpeF9p bml0X2RhdGEoZXNwX2luaXRfZGF0YSwgc2l6ZSk7CisJYXRvbWljX3N1YigxLCAmc2lwLT50eF9j cmVkaXRzKTsKKwlzaXBfc2VuZF9jbWQoc2lwLCBTSVBfQ01EX0lOSVQsIHNpemUsICh2b2lkICop ZXNwX2luaXRfZGF0YSk7Cit9CisKK2ludCBzaXBfc2VuZF9jb25maWcoc3RydWN0IGVzcF9wdWIg KmVwdWIsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOworCXN0cnVjdCBzaXBfY21kX2NvbmZpZyAqY29uZmlnY21kOworCisJc2tiID0gc2lwX2Fs bG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLCBzaXplb2Yoc3RydWN0IHNpcF9jbWRfY29uZmlnKSAr CisJCQkJICAgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwgU0lQX0NNRF9DT05GSUcpOworCWlmICgh c2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9kYmcoZXB1Yi0+ZGV2LCAiJXMgY29uZmln IGNlbnRlciBmcmVxICVkXG4iLCBfX2Z1bmNfXywKKwkJY29uZi0+Y2hhbmRlZi5jaGFuLT5jZW50 ZXJfZnJlcSk7CisKKwljb25maWdjbWQgPSAoc3RydWN0IHNpcF9jbWRfY29uZmlnICopKHNrYi0+ ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOworCWNvbmZpZ2NtZC0+Y2VudGVyX2ZyZXEg PSBjb25mLT5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxOworCWNvbmZpZ2NtZC0+ZHVyYXRpb24g PSAwOworCisJcmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwgRU5RVUVVRV9Q UklPUl9UQUlMKTsKK30KKworaW50IHNpcF9zZW5kX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgZXNw X3B1YiAqZXB1Yiwgc3RydWN0IGVzcF92aWYgKmV2aWYsCisJCQkgICAgIHU4ICpic3NpZCwgaW50 IGFzc29jKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNpcF9jbWRfYnNzX2lu Zm9fdXBkYXRlICpic3NjbWQ7CisKKwlza2IgPSBzaXBfYWxsb2NfY3RybF9za2J1ZihlcHViLT5z aXAsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBzaXBfY21kX2Jzc19pbmZvX3VwZGF0ZSkgKworCQkJ CSAgIHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksCisJCQkJICAgU0lQX0NNRF9CU1NfSU5GT19VUERB VEUpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJzc2NtZCA9IChzdHJ1Y3Qg c2lwX2NtZF9ic3NfaW5mb191cGRhdGUgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBzaXBf aGRyKSk7CisKKwlpZiAoYXNzb2MgPT0gMikJLy9oYWNrIGZvciBzb2Z0QVAgbW9kZQorCQlic3Nj bWQtPmJlYWNvbl9pbnQgPSBldmlmLT5iZWFjb25faW50ZXJ2YWw7CisJZWxzZSBpZiAoYXNzb2Mg PT0gMSkKKwkJc2V0X2JpdChFU1BfV0xfRkxBR19DT05ORUNULCAmZXB1Yi0+d2wuZmxhZ3MpOwor CWVsc2UKKwkJY2xlYXJfYml0KEVTUF9XTF9GTEFHX0NPTk5FQ1QsICZlcHViLT53bC5mbGFncyk7 CisKKwlic3NjbWQtPmJzc2lkX25vID0gZXZpZi0+aW5kZXg7CisJYnNzY21kLT5pc2Fzc29jID0g YXNzb2M7CisJYnNzY21kLT5iZWFjb25faW50ID0gZXZpZi0+YmVhY29uX2ludGVydmFsOworCW1l bWNweShic3NjbWQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCisJcmV0dXJuIHNpcF9jbWRf ZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwgRU5RVUVVRV9QUklPUl9UQUlMKTsKK30KKworaW50IHNp cF9zZW5kX3dtbV9wYXJhbXMoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IGFjaSwKKwkJCWNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNr X2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2lwX2NtZF9zZXRfd21tX3BhcmFtcyAqYnNzY21kOworCisJ c2tiID0gc2lwX2FsbG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLAorCQkJCSAgIHNpemVvZihzdHJ1 Y3Qgc2lwX2NtZF9zZXRfd21tX3BhcmFtcykgKworCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2lwX2hk ciksCisJCQkJICAgU0lQX0NNRF9TRVRfV01NX1BBUkFNKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlic3NjbWQgPSAoc3RydWN0IHNpcF9jbWRfc2V0X3dtbV9wYXJhbXMgKiko c2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSk7CisJYnNzY21kLT5hY2kgPSBhY2k7 CisJYnNzY21kLT5haWZzID0gcGFyYW1zLT5haWZzOworCWJzc2NtZC0+dHhvcF91cyA9IHBhcmFt cy0+dHhvcCAqIDMyOworCWJzc2NtZC0+ZWN3X21pbiA9IDMyIC0gX19idWlsdGluX2NseihwYXJh bXMtPmN3X21pbik7CisJYnNzY21kLT5lY3dfbWF4ID0gMzIgLSBfX2J1aWx0aW5fY2x6KHBhcmFt cy0+Y3dfbWF4KTsKKworCXJldHVybiBzaXBfY21kX2VucXVldWUoZXB1Yi0+c2lwLCBza2IsIEVO UVVFVUVfUFJJT1JfVEFJTCk7Cit9CisKK2ludCBzaXBfc2VuZF9hbXBkdV9hY3Rpb24oc3RydWN0 IGVzcF9wdWIgKmVwdWIsIHU4IGFjdGlvbl9udW0sIGNvbnN0IHU4ICphZGRyLAorCQkJICB1MTYg dGlkLCB1MTYgc3NuLCB1OCBidWZfc2l6ZSkKK3sKKwlpbnQgaW5kZXggPSAwOworCXN0cnVjdCBz a19idWZmICpza2I7CisJc3RydWN0IHNpcF9jbWRfYW1wZHVfYWN0aW9uICphY3Rpb247CisKKwlp ZiAoYWN0aW9uX251bSA9PSBTSVBfQU1QRFVfUlhfU1RBUlQpCisJCWluZGV4ID0gZXNwX2dldF9l bXB0eV9yeGFtcGR1KGVwdWIsIGFkZHIsIHRpZCk7CisJZWxzZSBpZiAoYWN0aW9uX251bSA9PSBT SVBfQU1QRFVfUlhfU1RPUCkKKwkJaW5kZXggPSBlc3BfZ2V0X2V4aXN0X3J4YW1wZHUoZXB1Yiwg YWRkciwgdGlkKTsKKworCWlmIChpbmRleCA8IDApCisJCXJldHVybiAtRUFDQ0VTOworCisJc2ti ID0gc2lwX2FsbG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLAorCQkJCSAgIHNpemVvZihzdHJ1Y3Qg c2lwX2NtZF9hbXBkdV9hY3Rpb24pICsKKwkJCQkgICBzaXplb2Yoc3RydWN0IHNpcF9oZHIpLAor CQkJCSAgIFNJUF9DTURfQU1QRFVfQUNUSU9OKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlhY3Rpb24gPSAoc3RydWN0IHNpcF9jbWRfYW1wZHVfYWN0aW9uICopKHNrYi0+ZGF0 YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOworCWFjdGlvbi0+YWN0aW9uID0gYWN0aW9uX251 bTsKKwkvL2ZvciBUWCwgaXQgbWVhbnMgaW50ZXJmYWNlIGluZGV4CisJYWN0aW9uLT5pbmRleCA9 IHNzbjsKKworCXN3aXRjaCAoYWN0aW9uX251bSkgeworCWNhc2UgU0lQX0FNUERVX1JYX1NUQVJU OgorCQlhY3Rpb24tPnNzbiA9IHNzbjsKKwljYXNlIFNJUF9BTVBEVV9SWF9TVE9QOgorCQlhY3Rp b24tPmluZGV4ID0gaW5kZXg7CisJY2FzZSBTSVBfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJY2Fz ZSBTSVBfQU1QRFVfVFhfU1RPUDoKKwkJYWN0aW9uLT53aW5fc2l6ZSA9IGJ1Zl9zaXplOworCQlh Y3Rpb24tPnRpZCA9IHRpZDsKKwkJbWVtY3B5KGFjdGlvbi0+YWRkciwgYWRkciwgRVRIX0FMRU4p OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVwdWItPnNpcCwgc2ti LCBFTlFVRVVFX1BSSU9SX1RBSUwpOworfQorCisjaWZkZWYgSFdfU0NBTgorLyogc2VuZCBjbWQg dG8gdGFyZ2V0LCBpZiBhYm9ydGVkIGlzIHRydWUsIGluZm9ybSB0YXJnZXQgc3RvcCBzY2FuLCBy ZXBvcnQgc2NhbiBjb21wbGV0ZSBpbWVkaWF0ZWx5CisgKiByZXR1cm4gMTogY29tcGxldGUgb3Zl ciwgMDogc3VjY2Vzcywgc3RpbGwgaGF2ZSBuZXh0IHNjYW4sIC0xOiBoYXJkd2FyZSBmYWlsdXJl CisgKi8KK2ludCBzaXBfc2VuZF9zY2FuKHN0cnVjdCBlc3BfcHViICplcHViKQoreworCXN0cnVj dCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxID0gZXB1Yi0+d2wuc2Nhbl9yZXE7CisJ c3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2lwX2NtZF9zY2FuICpzY2FuY21kOworCXU4 ICpwdHI7CisJaW50IGk7CisJdTggYXBwZW5kX2xlbiwgc3NpZF9sZW47CisKKwlFU1NFUlQoc2Nh bl9yZXEpOworCWlmICghc2Nhbl9yZXEtPm5fc3NpZHMpCisJCXNzaWRfbGVuID0gMDsKKwllbHNl IGlmIChzY2FuX3JlcS0+bl9zc2lkcyA9PSAxKQorCQlzc2lkX2xlbiA9IHNjYW5fcmVxLT5zc2lk cy0+c3NpZF9sZW47CisJLyogTGltaXQgdG8gdHdvIFNTSURzICovCisJZWxzZQorCQlzc2lkX2xl biA9IHNjYW5fcmVxLT5zc2lkcy0+c3NpZF9sZW4gKworCQkJKHNjYW5fcmVxLT5zc2lkcyArIDEp LT5zc2lkX2xlbjsKKworCWFwcGVuZF9sZW4gPSBzc2lkX2xlbiArIHNjYW5fcmVxLT5uX2NoYW5u ZWxzICsgc2Nhbl9yZXEtPmllX2xlbjsKKworCXNrYiA9IHNpcF9hbGxvY19jdHJsX3NrYnVmKGVw dWItPnNpcCwgc2l6ZW9mKHN0cnVjdCBzaXBfY21kX3NjYW4pICsKKwkJCQkgICBzaXplb2Yoc3Ry dWN0IHNpcF9oZHIpICsgYXBwZW5kX2xlbiwKKwkJCQkgICBTSVBfQ01EX1NDQU4pOworCisJaWYg KCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHRyID0gc2tiLT5kYXRhOworCXNjYW5jbWQg PSAoc3RydWN0IHNpcF9jbWRfc2NhbiAqKShwdHIgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsK KworCXB0ciArPSBzaXplb2Yoc3RydWN0IHNpcF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBzaXBfY21k X3NjYW4pOworCXNjYW5jbWQtPmFib3J0ZWQgPSBmYWxzZTsKKworCS8qIEZJWE1FOiBtZWggKi8K KwlpZiAoc2Nhbl9yZXEtPm5fc3NpZHMgPD0gMCkgeworCQlzY2FuY21kLT5zc2lkX2xlbiA9IDA7 CisJfSBlbHNlIHsKKwkJc2NhbmNtZC0+c3NpZF9sZW4gPSBzc2lkX2xlbjsKKwkJaWYgKHNjYW5f cmVxLT5uX3NzaWRzID09IDEpCisJCQltZW1jcHkocHRyLCBzY2FuX3JlcS0+c3NpZHMtPnNzaWQs IHNjYW5jbWQtPnNzaWRfbGVuKTsKKwkJLyogTGltaXQgdG8gdHdvIFNTSURzICovCisJCWVsc2UK KwkJCW1lbWNweShwdHIsIChzY2FuX3JlcS0+c3NpZHMgKyAxKS0+c3NpZCwKKwkJCSAgICAgICBz Y2FuY21kLT5zc2lkX2xlbik7CisJfQorCisJcHRyICs9IHNjYW5jbWQtPnNzaWRfbGVuOworCXNj YW5jbWQtPm5fY2hhbm5lbHMgPSBzY2FuX3JlcS0+bl9jaGFubmVsczsKKwlmb3IgKGkgPSAwOyBp IDwgc2Nhbl9yZXEtPm5fY2hhbm5lbHM7IGkrKykKKwkJcHRyW2ldID0gc2Nhbl9yZXEtPmNoYW5u ZWxzW2ldLT5od192YWx1ZTsKKworCXB0ciArPSBzY2FuY21kLT5uX2NoYW5uZWxzOworCWlmIChz Y2FuX3JlcS0+aWVfbGVuICYmIHNjYW5fcmVxLT5pZSkgeworCQlzY2FuY21kLT5pZV9sZW4gPSBz Y2FuX3JlcS0+aWVfbGVuOworCQltZW1jcHkocHRyLCBzY2FuX3JlcS0+aWUsIHNjYW5fcmVxLT5p ZV9sZW4pOworCX0gZWxzZSB7CisJCXNjYW5jbWQtPmllX2xlbiA9IDA7CisJfQorCS8vYWRkIGEg ZmxhZyB0aGF0IHN1cHBvcnQgdHdvIHNzaWRzLAorCWlmIChzY2FuX3JlcS0+bl9zc2lkcyA+IDEp CisJCXNjYW5jbWQtPnNzaWRfbGVuIHw9IDB4ODA7CisKKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVl KGVwdWItPnNpcCwgc2tiLCBFTlFVRVVFX1BSSU9SX1RBSUwpOworfQorI2VuZGlmCisKK3ZvaWQg c2lwX3NjYW5kb25lX3Byb2Nlc3Moc3RydWN0IGVzcF9zaXAgKnNpcCwKKwkJCSAgc3RydWN0IHNp cF9ldnRfc2Nhbl9yZXBvcnQgKnNjYW5fcmVwb3J0KQoreworCXN0cnVjdCBlc3BfcHViICplcHVi ID0gc2lwLT5lcHViOworCisJaWYgKGVwdWItPndsLnNjYW5fcmVxKSB7CisJCWh3X3NjYW5fZG9u ZShlcHViLCBzY2FuX3JlcG9ydC0+YWJvcnRlZCk7CisJCWVwdWItPndsLnNjYW5fcmVxID0gTlVM TDsKKwl9Cit9CisKK2ludCBzaXBfc2VuZF9zZXRrZXkoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4 IGJzc2lkX25vLCB1OCAqcGVlcl9hZGRyLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29u ZiAqa2V5LCB1OCBpc3ZhbGlkKQoreworCXN0cnVjdCBzaXBfY21kX3NldGtleSAqc2V0a2V5Y21k OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBzaXBfYWxsb2NfY3RybF9za2J1Zihl cHViLT5zaXAsIHNpemVvZihzdHJ1Y3Qgc2lwX2NtZF9zZXRrZXkpICsKKwkJCQkgICBzaXplb2Yo c3RydWN0IHNpcF9oZHIpLCBTSVBfQ01EX1NFVEtFWSk7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlzZXRrZXljbWQgPSAoc3RydWN0IHNpcF9jbWRfc2V0a2V5ICopKHNrYi0+ ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOworCisJaWYgKHBlZXJfYWRkcikKKwkJbWVt Y3B5KHNldGtleWNtZC0+YWRkciwgcGVlcl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1z ZXQoc2V0a2V5Y21kLT5hZGRyLCAwLCBFVEhfQUxFTik7CisKKwlzZXRrZXljbWQtPmJzc2lkX25v ID0gYnNzaWRfbm87CisJc2V0a2V5Y21kLT5od19rZXlfaWR4ID0ga2V5LT5od19rZXlfaWR4Owor CisJaWYgKGlzdmFsaWQpIHsKKwkJc2V0a2V5Y21kLT5hbGcgPSBlc3BfY2lwaGVyMmFsZyhrZXkt PmNpcGhlcik7CisJCXNldGtleWNtZC0+a2V5aWR4ID0ga2V5LT5rZXlpZHg7CisJCXNldGtleWNt ZC0+a2V5bGVuID0ga2V5LT5rZXlsZW47CisJCWlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhF Ul9TVUlURV9US0lQKSB7CisJCQltZW1jcHkoc2V0a2V5Y21kLT5rZXksIGtleS0+a2V5LCAxNik7 CisJCQltZW1jcHkoc2V0a2V5Y21kLT5rZXkgKyAxNiwga2V5LT5rZXkgKyAyNCwgOCk7CisJCQlt ZW1jcHkoc2V0a2V5Y21kLT5rZXkgKyAyNCwga2V5LT5rZXkgKyAxNiwgOCk7CisJCX0gZWxzZSB7 CisJCQltZW1jcHkoc2V0a2V5Y21kLT5rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCX0K KworCQlzZXRrZXljbWQtPmZsYWdzID0gMTsKKwl9IGVsc2UgeworCQlzZXRrZXljbWQtPmZsYWdz ID0gMDsKKwl9CisKKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVwdWItPnNpcCwgc2tiLCBFTlFV RVVFX1BSSU9SX1RBSUwpOworfQorCisvL3JlbWFpbl9vbl9jaGFubmVsCitpbnQgc2lwX3NlbmRf cm9jKHN0cnVjdCBlc3BfcHViICplcHViLCB1MTYgY2VudGVyX2ZyZXEsIHUxNiBkdXJhdGlvbikK K3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzaXBfY21kX2NvbmZpZyAqY29uZmln Y21kOworCisJc2tiID0gc2lwX2FsbG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLCBzaXplb2Yoc3Ry dWN0IHNpcF9jbWRfY29uZmlnKSArCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwgU0lQ X0NNRF9DT05GSUcpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvbmZpZ2Nt ZCA9IChzdHJ1Y3Qgc2lwX2NtZF9jb25maWcgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBz aXBfaGRyKSk7CisJY29uZmlnY21kLT5jZW50ZXJfZnJlcSA9IGNlbnRlcl9mcmVxOworCWNvbmZp Z2NtZC0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKKworCXJldHVybiBzaXBfY21kX2VucXVldWUoZXB1 Yi0+c2lwLCBza2IsIEVOUVVFVUVfUFJJT1JfVEFJTCk7Cit9CisKK2ludCBzaXBfc2VuZF9zZXRf c3RhKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBpZmlkeCwgdTggc2V0LAorCQkgICAgIHN0cnVj dCBpZWVlODAyMTFfc3RhICpzdGEsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAg dTggaW5kZXgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2lwX2NtZF9zZXRz dGEgKnNldHN0YWNtZDsKKworCXNrYiA9IHNpcF9hbGxvY19jdHJsX3NrYnVmKGVwdWItPnNpcCwg c2l6ZW9mKHN0cnVjdCBzaXBfY21kX3NldHN0YSkgKworCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2lw X2hkciksIFNJUF9DTURfU0VUU1RBKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlzZXRzdGFjbWQgPSAoc3RydWN0IHNpcF9jbWRfc2V0c3RhICopKHNrYi0+ZGF0YSArIHNpemVv ZihzdHJ1Y3Qgc2lwX2hkcikpOworCXNldHN0YWNtZC0+aWZpZHggPSBpZmlkeDsKKwlzZXRzdGFj bWQtPmluZGV4ID0gaW5kZXg7CisJc2V0c3RhY21kLT5zZXQgPSBzZXQ7CisKKwlpZiAoIXN0YS0+ YWlkKQorCQlzZXRzdGFjbWQtPmFpZCA9IHZpZi0+YnNzX2NvbmYuYWlkOworCWVsc2UKKwkJc2V0 c3RhY21kLT5haWQgPSBzdGEtPmFpZDsKKworCW1lbWNweShzZXRzdGFjbWQtPm1hYywgc3RhLT5h ZGRyLCBFVEhfQUxFTik7CisKKwlpZiAoIXNldCkKKwkJZ290byBzZW5kOworCisJaWYgKHN0YS0+ aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjEx X0hUX0NBUF9TR0lfMjApCisJCQlzZXRzdGFjbWQtPnBoeW1vZGUgPSBFU1BfSUVFRTgwMjExX1Rf SFQyMF9TOworCQllbHNlCisJCQlzZXRzdGFjbWQtPnBoeW1vZGUgPSBFU1BfSUVFRTgwMjExX1Rf SFQyMF9MOworCQlzZXRzdGFjbWQtPmFtcGR1X2ZhY3RvciA9IHN0YS0+aHRfY2FwLmFtcGR1X2Zh Y3RvcjsKKwkJc2V0c3RhY21kLT5hbXBkdV9kZW5zaXR5ID0gc3RhLT5odF9jYXAuYW1wZHVfZGVu c2l0eTsKKwkJZ290byBzZW5kOworCX0KKworCWlmIChzdGEtPnN1cHBfcmF0ZXNbTkw4MDIxMV9C QU5EXzJHSFpdICYgfkNPTkZfSFdfQklUX1JBVEVfMTFCX01BU0spCisJCXNldHN0YWNtZC0+cGh5 bW9kZSA9IEVTUF9JRUVFODAyMTFfVF9PRkRNOworCWVsc2UKKwkJc2V0c3RhY21kLT5waHltb2Rl ID0gRVNQX0lFRUU4MDIxMV9UX0NDSzsKKworc2VuZDoKKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVl KGVwdWItPnNpcCwgc2tiLCBFTlFVRVVFX1BSSU9SX1RBSUwpOworfQorCitpbnQgc2lwX3NlbmRf cmVjYWxjX2NyZWRpdChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOworCisJc2tiID0gc2lwX2FsbG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLCBzaXplb2Yoc3Ry dWN0IHNpcF9oZHIpLAorCQkJCSAgIFNJUF9DTURfUkVDQUxDX0NSRURJVCk7CisJaWYgKCFza2Ip CisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAs IHNrYiwgRU5RVUVVRV9QUklPUl9IRUFEKTsKK30KKworaW50IHNpcF9jbWQoc3RydWN0IGVzcF9w dWIgKmVwdWIsIGVudW0gc2lwX2NtZF9pZCBjbWRfaWQsIHU4ICpjbWRfYnVmLAorCSAgICB1OCBj bWRfbGVuKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBzaXBfYWxsb2NfY3Ry bF9za2J1ZihlcHViLT5zaXAsIGNtZF9sZW4gKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpLAorCQkJ CSAgIGNtZF9pZCk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KHNr Yi0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksIGNtZF9idWYsIGNtZF9sZW4pOworCisJ cmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwgRU5RVUVVRV9QUklPUl9UQUlM KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9jdHJsLmggYi9k cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uYjkxNDNiYjEzNWIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9zdGFnaW5nL2VzcDgwODkvZXNwX2N0cmwuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDA5IC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgorICogQ29weXJpZ2h0IChj KSAyMDE3IEZyZWUgRWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNj aHVsekBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAq IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8K KyNpZm5kZWYgX0VTUF9DVFJMX0hfCisjZGVmaW5lIF9FU1BfQ1RSTF9IXworCitleHRlcm4gc3Ry dWN0IGNvbXBsZXRpb24gKmdsX2Jvb3R1cF9jcGx4OworCitpbnQgc2lwX3NlbmRfY29uZmlnKHN0 cnVjdCBlc3BfcHViICplcHViLCBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpOworCitpbnQg c2lwX3NlbmRfc2V0a2V5KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBic3NpZF9ubywgdTggKnBl ZXJfYWRkciwKKwkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggaXN2YWxp ZCk7CisKK2ludCBzaXBfc2VuZF9zY2FuKHN0cnVjdCBlc3BfcHViICplcHViKTsKKwordm9pZCBz aXBfc2NhbmRvbmVfcHJvY2VzcyhzdHJ1Y3QgZXNwX3NpcCAqc2lwLAorCQkJICBzdHJ1Y3Qgc2lw X2V2dF9zY2FuX3JlcG9ydCAqc2Nhbl9yZXBvcnQpOworCitpbnQgc2lwX3NlbmRfYnNzX2luZm9f dXBkYXRlKHN0cnVjdCBlc3BfcHViICplcHViLCBzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiwKKwkJCSAg ICAgdTggKmJzc2lkLCBpbnQgYXNzb2MpOworCitpbnQgc2lwX3NlbmRfd21tX3BhcmFtcyhzdHJ1 Y3QgZXNwX3B1YiAqZXB1YiwgdTggYWNpLAorCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9x dWV1ZV9wYXJhbXMgKnBhcmFtcyk7CisKK2ludCBzaXBfc2VuZF9hbXBkdV9hY3Rpb24oc3RydWN0 IGVzcF9wdWIgKmVwdWIsIHU4IGFjdGlvbl9udW0sIGNvbnN0IHU4ICphZGRyLAorCQkJICB1MTYg dGlkLCB1MTYgc3NuLCB1OCBidWZfc2l6ZSk7CisKK2ludCBzaXBfc2VuZF9yb2Moc3RydWN0IGVz cF9wdWIgKmVwdWIsIHUxNiBjZW50ZXJfZnJlcSwgdTE2IGR1cmF0aW9uKTsKKworaW50IHNpcF9z ZW5kX3NldF9zdGEoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IGlmaWR4LCB1OCBzZXQsCisJCSAg ICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwK KwkJICAgICB1OCBpbmRleCk7CisKK2ludCBzaXBfcGFyc2VfZXZlbnRzKHN0cnVjdCBlc3Bfc2lw ICpzaXAsIHU4ICpidWYpOworCitpbnQgc2lwX3NlbmRfcmVjYWxjX2NyZWRpdChzdHJ1Y3QgZXNw X3B1YiAqZXB1Yik7CisKK2ludCBzaXBfY21kKHN0cnVjdCBlc3BfcHViICplcHViLCBlbnVtIHNp cF9jbWRfaWQgY21kX2lkLCB1OCAqY21kX2J1ZiwKKwkgICAgdTggY21kX2xlbik7CisKKyNlbmRp ZgkJCQkvKiBfRVNQX0NUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF9kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2RlYnVnLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNjQ3MmI0MzM3NjgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZGVidWcuYwpAQCAtMCww ICsxLDI0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5 c3RlbS4KKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVu dGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVk ZSAic2lwMl9jb21tb24uaCIKKworI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgorCisjaWYgZGVmaW5l ZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX0VTUDgwODlfREVCVUdfRlMpCisK K3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplc3BfZGVidWdmc19yb290OworCitzdGF0aWMgc3NpemVf dCBlc3BfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVy LAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWlmICgqcHBvcyA+PSAzMikK KwkJcmV0dXJuIDA7CisKKwlpZiAoKnBwb3MgKyBjb3VudCA+IDMyKQorCQljb3VudCA9IDMyIC0g KnBwb3M7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgZmlscC0+cHJpdmF0ZV9kYXRhICsg KnBwb3MsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqcHBvcyArPSBjb3VudDsKKwor CXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZXNwX2RlYnVnZnNfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJIHNpemVfdCBj b3VudCwgbG9mZl90ICpwcG9zKQoreworCWlmICgqcHBvcyA+PSAzMikKKwkJcmV0dXJuIDA7CisK KwlpZiAoKnBwb3MgKyBjb3VudCA+IDMyKQorCQljb3VudCA9IDMyIC0gKnBwb3M7CisKKwlpZiAo Y29weV9mcm9tX3VzZXIoZmlscC0+cHJpdmF0ZV9kYXRhICsgKnBwb3MsIGJ1ZmZlciwgY291bnQp KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSpwcG9zICs9IGNvdW50OworCisJcmV0dXJuIGNvdW50 OworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVzcF9kZWJ1Z2ZzX2ZvcHMgPSB7 CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkucmVhZCA9 IGVzcF9kZWJ1Z2ZzX3JlYWQsCisJLndyaXRlID0gZXNwX2RlYnVnZnNfd3JpdGUsCit9OworCitz dHJ1Y3QgZGVudHJ5ICplc3BfZHVtcF92YXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRy eSAqcGFyZW50LAorCQkJICAgIHZvaWQgKnZhbHVlLCBlbnVtIGVzcF90eXBlIHR5cGUpCit7CisJ c3RydWN0IGRlbnRyeSAqcmMgPSBOVUxMOworCXVtb2RlX3QgbW9kZSA9IDA2NDQ7CisKKwlpZiAo IWVzcF9kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFwYXJlbnQpCisJCXBh cmVudCA9IGVzcF9kZWJ1Z2ZzX3Jvb3Q7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEVTUF9V ODoKKwkJcmMgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChuYW1lLCBtb2RlLCBwYXJlbnQsICh1OCAqKXZh bHVlKTsKKwkJYnJlYWs7CisJY2FzZSBFU1BfVTE2OgorCQlyYyA9IGRlYnVnZnNfY3JlYXRlX3Ux NihuYW1lLCBtb2RlLCBwYXJlbnQsICh1MTYgKil2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgRVNQ X1UzMjoKKwkJcmMgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIobmFtZSwgbW9kZSwgcGFyZW50LCAodTMy ICopdmFsdWUpOworCQlicmVhazsKKwljYXNlIEVTUF9VNjQ6CisJCXJjID0gZGVidWdmc19jcmVh dGVfdTY0KG5hbWUsIG1vZGUsIHBhcmVudCwgKHU2NCAqKXZhbHVlKTsKKwkJYnJlYWs7CisJY2Fz ZSBFU1BfQk9PTDoKKwkJcmMgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKG5hbWUsIG1vZGUsIHBhcmVu dCwgKGJvb2wgKil2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvLzMyCisJCXJjID0gZGVi dWdmc19jcmVhdGVfdTMyKG5hbWUsIG1vZGUsIHBhcmVudCwgKHUzMiAqKXZhbHVlKTsKKwl9CisK KwlpZiAoIXJjKQorCQlnb3RvIF9mYWlsOworCisJcmV0dXJuIHJjOworCitfZmFpbDoKKwlkZWJ1 Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZXNwX2RlYnVnZnNfcm9vdCk7CisJZXNwX2RlYnVnZnNfcm9v dCA9IE5VTEw7CisJcHJpbnRrKCIlcyBmYWlsZWQsIGRlYnVnZnMgcm9vdCByZW1vdmVkOyB2YXIg bmFtZTogJXNcbiIsIF9fZnVuY19fLAorCSAgICAgICBuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30K Kworc3RydWN0IGRlbnRyeSAqZXNwX2R1bXBfYXJyYXkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0 IGRlbnRyeSAqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyICpi bG9iKQoreworCXN0cnVjdCBkZW50cnkgKnJjOworCXVtb2RlX3QgbW9kZSA9IDA2NDQ7CisKKwlp ZiAoIWVzcF9kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFwYXJlbnQpCisJ CXBhcmVudCA9IGVzcF9kZWJ1Z2ZzX3Jvb3Q7CisKKwlyYyA9IGRlYnVnZnNfY3JlYXRlX2Jsb2Io bmFtZSwgbW9kZSwgcGFyZW50LCBibG9iKTsKKwlpZiAoIXJjKQorCQlnb3RvIF9mYWlsOworCisJ cmV0dXJuIHJjOworCitfZmFpbDoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZXNwX2RlYnVn ZnNfcm9vdCk7CisJZXNwX2RlYnVnZnNfcm9vdCA9IE5VTEw7CisJcHJpbnRrKCIlcyBmYWlsZWQs IGRlYnVnZnMgcm9vdCByZW1vdmVkOyB2YXIgbmFtZTogJXNcbiIsIF9fZnVuY19fLAorCSAgICAg ICBuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRlbnRyeSAqZXNwX2R1bXAoY29u c3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJdm9pZCAqZGF0YSwgaW50 IHNpemUpCit7CisJc3RydWN0IGRlbnRyeSAqcmM7CisJdW1vZGVfdCBtb2RlID0gMDY0NDsKKwor CWlmICghZXNwX2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXBhcmVudCkK KwkJcGFyZW50ID0gZXNwX2RlYnVnZnNfcm9vdDsKKworCXJjID0gZGVidWdmc19jcmVhdGVfZmls ZShuYW1lLCBtb2RlLCBwYXJlbnQsIGRhdGEsICZlc3BfZGVidWdmc19mb3BzKTsKKwlpZiAoIXJj KQorCQlnb3RvIF9mYWlsOworCisJcmV0dXJuIHJjOworCitfZmFpbDoKKwlkZWJ1Z2ZzX3JlbW92 ZV9yZWN1cnNpdmUoZXNwX2RlYnVnZnNfcm9vdCk7CisJZXNwX2RlYnVnZnNfcm9vdCA9IE5VTEw7 CisJcHJpbnRrKCIlcyBmYWlsZWQsIGRlYnVnZnMgcm9vdCByZW1vdmVkOyB2YXIgbmFtZTogJXNc biIsIF9fZnVuY19fLAorCSAgICAgICBuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0 IGRlbnRyeSAqZXNwX2RlYnVnZnNfYWRkX3N1Yl9kaXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz dHJ1Y3QgZGVudHJ5ICpzdWJfZGlyOworCisJc3ViX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcihu YW1lLCBlc3BfZGVidWdmc19yb290KTsKKwlpZiAoIXN1Yl9kaXIpCisJCWdvdG8gX2ZhaWw7CisK KwlyZXR1cm4gc3ViX2RpcjsKKworX2ZhaWw6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGVz cF9kZWJ1Z2ZzX3Jvb3QpOworCWVzcF9kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCXByaW50aygiJXMg ZmFpbGVkLCBkZWJ1Z2ZzIHJvb3QgcmVtb3ZlZDsgZGlyIG5hbWU6ICVzXG4iLCBfX2Z1bmNfXywK KwkgICAgICAgbmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBlc3BfZGVidWdmc19pbml0 KHZvaWQpCit7CisJZXNwX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZXNwX2Rl YnVnIiwgTlVMTCk7CisKKwlpZiAoSVNfRVJSX09SX05VTEwoZXNwX2RlYnVnZnNfcm9vdCkpCisJ CXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXNwX2RlYnVnZnNfZXhp dCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShlc3BfZGVidWdmc19yb290KTsK K30KKworI2Vsc2UKKworaW5saW5lIHN0cnVjdCBkZW50cnkgKmVzcF9kdW1wX3Zhcihjb25zdCBj aGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJICAgdm9pZCAqdmFsdWUsIGVu dW0gZXNwX3R5cGUgdHlwZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworaW5saW5lIHN0cnVjdCBk ZW50cnkgKmVzcF9kdW1wX2FycmF5KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBh cmVudCwKKwkJCQkgICAgIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciAqYmxvYikKK3sKKwly ZXR1cm4gTlVMTDsKK30KKworaW5saW5lIHN0cnVjdCBkZW50cnkgKmVzcF9kdW1wKGNvbnN0IGNo YXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCSAgICAgICB2b2lkICpkYXRhLCBp bnQgc2l6ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRlbnRyeSAqZXNwX2RlYnVn ZnNfYWRkX3N1Yl9kaXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwor aW5saW5lIGludCBlc3BfZGVidWdmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIC1FUEVSTTsKK30K KworaW5saW5lIHZvaWQgZXNwX2RlYnVnZnNfZXhpdCh2b2lkKQoreworfQorCisjZW5kaWYKKwor LyogRklYTUU6IFdoYXQncyB0aGUgYWN0dWFsIHVzZWNhc2U/ICovCit2b2lkIHNob3dfYnVmKHU4 ICpidWYsIHUzMiBsZW4pCit7CisJaW50IGkgPSAwLCBqOworCisJcHJpbnRrKEtFUk5fSU5GTyAi XG4rKysrKysrKysrKysrKysrc2hvdyByYnVmKysrKysrKysrKysrKysrXG4iKTsKKwlmb3IgKGkg PSAwOyBpIDwgKGxlbiAvIDE2KTsgaSsrKSB7CisJCWogPSBpICogMTY7CisJCXByaW50ayhLRVJO X0lORk8KKwkJICAgICAgICIweCUwMngsIDB4JTAyeCwgMHglMDJ4LCAweCUwMngsIDB4JTAyeCwg MHglMDJ4LCAweCUwMngsIDB4JTAyeCwgMHglMDJ4LCAweCUwMngsIDB4JTAyeCwgMHglMDJ4LCAw eCUwMngsIDB4JTAyeCwgMHglMDJ4LCAweCUwMnhcbiIsCisJCSAgICAgICBidWZbal0sIGJ1Zltq ICsgMV0sIGJ1ZltqICsgMl0sIGJ1ZltqICsgM10sCisJCSAgICAgICBidWZbaiArIDRdLCBidWZb aiArIDVdLCBidWZbaiArIDZdLCBidWZbaiArIDddLAorCQkgICAgICAgYnVmW2ogKyA4XSwgYnVm W2ogKyA5XSwgYnVmW2ogKyAxMF0sIGJ1ZltqICsgMTFdLAorCQkgICAgICAgYnVmW2ogKyAxMl0s IGJ1ZltqICsgMTNdLCBidWZbaiArIDE0XSwgYnVmW2ogKyAxNV0pOworCX0KKwlwcmludGsoS0VS Tl9JTkZPICJcbisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIpOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2RlYnVnLmggYi9kcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmViOWJkZGZlOTg0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9kZWJ1Zy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMp IDIwMTcgRnJlZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2No dWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICog dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLwor CisjaWZuZGVmIF9ERUJVR19IXworCisjaWZkZWYgQVNTRVJUX1BBTklDCisjZGVmaW5lIEVTU0VS VCh2KSBCVUdfT04oISh2KSkKKyNlbHNlCisjZGVmaW5lIEVTU0VSVCh2KSBpZighKHYpKSBwcmlu dGsoIkVTU0VSVDolcyAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKQorI2VuZGlmCisKKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUg PGxpbnV4L3VhY2Nlc3MuaD4KKworZW51bSBlc3BfdHlwZSB7CisJRVNQX0JPT0wsCisJRVNQX1U4 LAorCUVTUF9VMTYsCisJRVNQX1UzMiwKKwlFU1BfVTY0Cit9OworCitzdHJ1Y3QgZGVudHJ5ICpl c3BfZHVtcF92YXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJ ICAgIHZvaWQgKnZhbHVlLCBlbnVtIGVzcF90eXBlIHR5cGUpOworCitzdHJ1Y3QgZGVudHJ5ICpl c3BfZHVtcF9hcnJheShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJ CQkgICAgICBzdHJ1Y3QgZGVidWdmc19ibG9iX3dyYXBwZXIgKmJsb2IpOworCitzdHJ1Y3QgZGVu dHJ5ICplc3BfZHVtcChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZv aWQgKmRhdGEsCisJCQlpbnQgc2l6ZSk7CisKK3N0cnVjdCBkZW50cnkgKmVzcF9kZWJ1Z2ZzX2Fk ZF9zdWJfZGlyKGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgZXNwX2RlYnVnZnNfaW5pdCh2b2lk KTsKKwordm9pZCBlc3BfZGVidWdmc19leGl0KHZvaWQpOworCitlbnVtIHsKKwlFU1BfREJHX0VS Uk9SID0gQklUKDApLAorCUVTUF9EQkdfVFJBQ0UgPSBCSVQoMSksCisJRVNQX0RCR19MT0cgPSBC SVQoMiksCisJRVNQX0RCRyA9IEJJVCgzKSwKKwlFU1BfU0hPVyA9IEJJVCg0KSwKKwlFU1BfREJH X1RYQU1QRFUgPSBCSVQoNSksCisJRVNQX0RCR19PUCA9IEJJVCg2KSwKKwlFU1BfREJHX1BTID0g QklUKDcpLAorCUVTUF9BVEUgPSBCSVQoOCksCisJRVNQX0RCR19BTEwgPSBHRU5NQVNLKDMxLCAw KQorfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBlc3BfbXNnX2xldmVsOworCisjZGVmaW5lIGVz cF9kYmcobWFzaywgZm10LCBhcmdzLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgXAorCWlmIChl c3BfbXNnX2xldmVsICYgbWFzaykgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByaW50ayhm bXQsICMjYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCit2 b2lkIHNob3dfYnVmKHU4ICpidWYsIHUzMiBsZW4pOworCisjZW5kaWYJCQkJLyogX0RFQlVHX0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZmlsZS5jIGIvZHJp dmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjdjN2VmMGQ4MzY5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTAgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMp IDIwMTcgRnJlZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2No dWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICog dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLwor CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5j bHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNp bmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CisKKyNp bmNsdWRlICJlc3BfZmlsZS5oIgorI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgorI2luY2x1ZGUgImVz cF9zaWYuaCIKKworLyogVE9ETyB1c2UgcHJvcGVyIG1vZHVsZSBwYXJhbSBmb3IgZWFjaCB2YWx1 ZSBpbnN0ZWFkIG9mIGEgYmlnIG9uZSAqLworc3RhdGljIGNoYXIgKm1vZHBhcmFtX2luaXRfZGF0 YV9jb25mOworbW9kdWxlX3BhcmFtX25hbWVkKGNvbmZpZywgbW9kcGFyYW1faW5pdF9kYXRhX2Nv bmYsIGNoYXJwLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29uZmlnLCAiRmlybXdhcmUgaW5p dCBjb25maWcgc3RyaW5nIChmb3JtYXQ6IGtleT12YWx1ZTspIik7CisKK3N0cnVjdCBlc3BfaW5p dF90YWJsZV9lbGVtIGVzcF9pbml0X3RhYmxlW01BWF9BVFRSX05VTV0gPSB7CisJLyogQ3J5c3Rh bCB0eXBlOgorCSAqIDA6IDQwTUh6IChkZWZhdWx0KQorCSAqIDE6IDI2TUh6IChFU1A4MjY2IEVT UC0xMkYpCisJICovCisJeyJjcnlzdGFsXzI2TV9lbiIsIDQ4LCAwfSwKKwkvKiBPdXRwdXQgY3J5 c3RhbCBjbG9jayB0byBwaW46CisJICogMDogTm9uZQorCSAqIDE6IEdQSU8xCisJICogMjogVVJY RDAKKwkgKi8KKwl7InRlc3RfeHRhbCIsIDQ5LCAwfSwKKwkvKiBIb3N0IFNESU8gbW9kZToKKwkg KiAwOiBBdXRvIGJ5IHBpbiBzdHJhcHBpbmcKKwkgKiAxOiBTRElPIGRhdGEgb3V0cHV0IG9uIG5l Z2F0aXZlIGVkZ2VzIChTRElPIHYxLjEpCisJICogMjogU0RJTyBkYXRhIG91dHB1dCBvbiBwb3Np dGl2ZSBlZGdlcyAoU0RJTyB2Mi4wKQorCSAqLworCXsic2Rpb19jb25maWd1cmUiLCA1MCwgMn0s CisJLyogV2lGaS9CbHVldG9vdGggY28tZXhpc3RlbmNlIHdpdGggQkszNTE1QSBCVCBjaGlwCisJ ICogMDogTm9uZQorCSAqIDE6IEdQSU8wLT5XTEFOX0FDVElWRSwgTVRNUy0+QlRfQUNUSVZFLCBN VERJLT5CVF9QUklPUklUWSwKKwkgKiAgICBVMFRYRC0+QU5UX1NFTF9CVCwgVTBSWEQtPkFOVF9T RUxfV0lGSQorCSAqLworCXsiYnRfY29uZmlndXJlIiwgNTEsIDB9LAorCS8qIEFudGVubmEgc2Vs ZWN0aW9uOgorCSAqIDA6IEFudGVubmEgaXMgZm9yIFdpRmkKKwkgKiAxOiBBbnRlbm5hIGlzIGZv ciBCbHVldG9vdGgKKwkgKi8KKwl7ImJ0X3Byb3RvY29sIiwgNTIsIDB9LAorCS8qIER1YWwgYW50 ZW5uYSBjb25maWd1cmF0aW9uIG1vZGU6CisJICogMDogTm9uZQorCSAqIDE6IFUwUlhEICsgWFBE X0RDREMKKwkgKiAyOiBVMFJYRCArIEdQSU8wCisJICogMzogVTBSWEQgKyBVMFRYRAorCSAqLwor CXsiZHVhbF9hbnRfY29uZmlndXJlIiwgNTMsIDB9LAorCS8qIEZpcm13YXJlIGRlYnVnZ2luZyBv dXRwdXQgcGluOgorCSAqIDA6IE5vbmUKKwkgKiAxOiBVQVJUIFRYIG9uIEdQSU8yCisJICogMjog VUFSVCBUWCBvbiBVMFRYRAorCSAqLworCXsidGVzdF91YXJ0X2NvbmZpZ3VyZSIsIDU0LCAyfSwK KwkvKiBXaGV0aGVyIHRvIHNoYXJlIGNyeXN0YWwgY2xvY2sgd2l0aCBCVCAoaW4gc2xlZXAgbW9k ZSk6CisJICogMDogbm8KKwkgKiAxOiBhbHdheXMgb24KKwkgKiAyOiBhdXRvbWF0aWNhbGx5IG9u IGFjY29yZGluZyB0byBYUERfRENEQworCSAqLworCXsic2hhcmVfeHRhbCIsIDU1LCAwfSwKKwkv KiBBbGxvdyBjaGlwIHRvIGJlIHdva2VuIHVwIGR1cmluZyBzbGVlcCBvbiBwaW46CisJICogMDog Tm9uZQorCSAqIDE6IFhQRF9EQ0RDCisJICogMjogR1BJTzAKKwkgKiAzOiBCb3RoIFhQRF9EQ0RD IGFuZCBHUElPMAorCSAqLworCXsiZ3Bpb193YWtlIiwgNTYsIDB9LAorCXsibm9fYXV0b19zbGVl cCIsIDU3LCAwfSwKKwl7InNwZWVkX3N1c3BlbmQiLCA1OCwgMH0sCisJeyJhdHRyMTEiLCAtMSwg LTF9LAorCXsiYXR0cjEyIiwgLTEsIC0xfSwKKwl7ImF0dHIxMyIsIC0xLCAtMX0sCisJeyJhdHRy MTQiLCAtMSwgLTF9LAorCXsiYXR0cjE1IiwgLTEsIC0xfSwKKwkvL2F0dHIgdGhhdCBpcyBub3Qg c2VuZCB0byB0YXJnZXQKKwkvKiBBbGxvdyBjaGlwIHRvIGJlIHJlc2V0IGJ5IEdQSU8gcGluOgor CSAqIDA6IG5vCisJICogMTogeWVzCisJICovCisJeyJleHRfcnN0IiwgLTEsIDB9LAorCXsid2Fr ZXVwX2dwaW8iLCAtMSwgMTJ9LAorCXsiYXRlX3Rlc3QiLCAtMSwgMH0sCisJeyJhdHRyMTkiLCAt MSwgLTF9LAorCXsiYXR0cjIwIiwgLTEsIC0xfSwKKwl7ImF0dHIyMSIsIC0xLCAtMX0sCisJeyJh dHRyMjIiLCAtMSwgLTF9LAorCXsiYXR0cjIzIiwgLTEsIC0xfSwKK307CisKKy8qIHVwZGF0ZSBp bml0IGNvbmZpZyB0YWJsZSAqLworc3RhdGljIGludCBzZXRfaW5pdF9jb25maWdfYXR0cihjb25z dCBjaGFyICphdHRyLCBpbnQgYXR0cl9sZW4sIHNob3J0IHZhbHVlKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IE1BWF9BVFRSX05VTTsgaSsrKQorCQlpZiAoIW1lbWNtcChlc3BfaW5p dF90YWJsZVtpXS5hdHRyLCBhdHRyLCBhdHRyX2xlbikpIHsKKwkJCWlmICh2YWx1ZSA8IDAgfHwg dmFsdWUgPiAyNTUpIHsKKwkJCQlwcmludGsoIiVzOiBhdHRyaWJ1dGUgdmFsdWUgZm9yICVzIGlz IG91dCBvZiByYW5nZSIsCisJCQkJICAgICAgIF9fZnVuY19fLCBlc3BfaW5pdF90YWJsZVtpXS5h dHRyKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWVzcF9pbml0X3RhYmxlW2ldLnZhbHVl ID0gdmFsdWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMg aW50IHVwZGF0ZV9pbml0X2NvbmZpZ19hdHRyKGNvbnN0IGNoYXIgKmF0dHIsIGludCBhdHRyX2xl biwKKwkJCQkgICBjb25zdCBjaGFyICp2YWwsIGludCB2YWxfbGVuKQoreworCWNoYXIgZGlnaXRz WzRdOworCXNob3J0IHZhbHVlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihk aWdpdHMpIC0gMSAmJiBpIDwgdmFsX2xlbjsgaSsrKQorCQlkaWdpdHNbaV0gPSB2YWxbaV07CisK KwlkaWdpdHNbaV0gPSAwOworCisJaWYgKGtzdHJ0b3UxNihkaWdpdHMsIDEwLCAmdmFsdWUpIDwg MCkgeworCQlwcmludGsoIiVzOiBpbnZhbGlkIGF0dHJpYnV0ZSB2YWx1ZTogJXMiLCBfX2Z1bmNf XywgZGlnaXRzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBzZXRfaW5pdF9jb25maWdf YXR0cihhdHRyLCBhdHRyX2xlbiwgdmFsdWUpOworfQorCisvKiBleHBvcnQgY29uZmlnIHRhYmxl IHNldHRpbmdzIHRvIFNESU8gZHJpdmVyICovCitzdGF0aWMgdm9pZCByZWNvcmRfaW5pdF9jb25m aWcodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQVRUUl9OVU07IGkr KykgeworCQlpZiAoZXNwX2luaXRfdGFibGVbaV0udmFsdWUgPCAwKQorCQkJY29udGludWU7CisK KwkJaWYgKCFzdHJjbXAoZXNwX2luaXRfdGFibGVbaV0uYXR0ciwgInNoYXJlX3h0YWwiKSkKKwkJ CXNpZl9yZWNvcmRfYnRfY29uZmlnKGVzcF9pbml0X3RhYmxlW2ldLnZhbHVlKTsKKwkJZWxzZSBp ZiAoIXN0cmNtcChlc3BfaW5pdF90YWJsZVtpXS5hdHRyLCAiZXh0X3JzdCIpKQorCQkJc2lmX3Jl Y29yZF9yc3RfY29uZmlnKGVzcF9pbml0X3RhYmxlW2ldLnZhbHVlKTsKKwkJZWxzZSBpZiAoIXN0 cmNtcChlc3BfaW5pdF90YWJsZVtpXS5hdHRyLCAid2FrZXVwX2dwaW8iKSkKKwkJCXNpZl9yZWNv cmRfd2FrZXVwX2dwaW9fY29uZmlnKGVzcF9pbml0X3RhYmxlW2ldLnZhbHVlKTsKKwkJZWxzZSBp ZiAoIXN0cmNtcChlc3BfaW5pdF90YWJsZVtpXS5hdHRyLCAiYXRlX3Rlc3QiKSkKKwkJCXNpZl9y ZWNvcmRfYXRlX2NvbmZpZyhlc3BfaW5pdF90YWJsZVtpXS52YWx1ZSk7CisJfQorfQorCitpbnQg cmVxdWVzdF9pbml0X2NvbmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNoYXIgKmF0dHIsICpz dHIsICpwOworCWludCBhdHRyX2xlbiwgc3RyX2xlbjsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdmFs OworCisJLyogQ2hlY2sgZm9yIGFueSBwYXJhbWV0ZXJzIHBhc3NlZCB0aHJvdWdoIGRldmljZXRy ZWUgKG9yIGFjcGkpICovCisJaWYgKCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiZXNw LGNyeXN0YWwtMjZNLWVuIiwgJnZhbCkpCisJCXNldF9pbml0X2NvbmZpZ19hdHRyKCJjcnlzdGFs XzI2TV9lbiIsIHN0cmxlbigiY3J5c3RhbF8yNk1fZW4iKSwKKwkJCQkgICAgIHZhbCk7CisKKwkv KiBwYXJzZSBvcHRpb25hbCBwYXJhbWV0ZXIgaW4gdGhlIGZvcm0gb2Yga2V5MT12YWx1ZSxrZXky PXZhbHVlLC4uICovCisJYXR0ciA9IE5VTEw7CisJYXR0cl9sZW4gPSAwOworCXN0cl9sZW4gPSAw OworCWZvciAocCA9IHN0ciA9IG1vZHBhcmFtX2luaXRfZGF0YV9jb25mOyBwICYmICpwOyBwKysp IHsKKwkJaWYgKCpwID09ICc9JykgeworCQkJYXR0ciA9IHN0cjsKKwkJCWF0dHJfbGVuID0gc3Ry X2xlbjsKKworCQkJc3RyID0gcCArIDE7CisJCQlzdHJfbGVuID0gMDsKKwkJfSBlbHNlIGlmICgq cCA9PSAnLCcgfHwgKnAgPT0gJzsnKSB7CisJCQlpZiAoYXR0cl9sZW4pCisJCQkJcmV0IHw9IHVw ZGF0ZV9pbml0X2NvbmZpZ19hdHRyKGF0dHIsIGF0dHJfbGVuLAorCQkJCQkJCSAgICAgICBzdHIs IHN0cl9sZW4pOworCisJCQlzdHIgPSBwICsgMTsKKwkJCWF0dHJfbGVuID0gMDsKKwkJCXN0cl9s ZW4gPSAwOworCQl9IGVsc2UgeworCQkJc3RyX2xlbisrOworCQl9CisJfQorCisJaWYgKGF0dHJf bGVuICYmIHN0ciAhPSBhdHRyKQorCQlyZXQgfD0gdXBkYXRlX2luaXRfY29uZmlnX2F0dHIoYXR0 ciwgYXR0cl9sZW4sIHN0ciwgc3RyX2xlbik7CisKKwlyZWNvcmRfaW5pdF9jb25maWcoKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZml4X2luaXRfZGF0YSh1OCAqaW5pdF9kYXRhX2J1Ziwg aW50IGJ1Zl9zaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSVhfQVRU Ul9OVU07IGkrKykgeworCQlpZiAoZXNwX2luaXRfdGFibGVbaV0ub2Zmc2V0ID4gLTEgJiYKKwkJ ICAgIGVzcF9pbml0X3RhYmxlW2ldLm9mZnNldCA8IGJ1Zl9zaXplICYmCisJCSAgICBlc3BfaW5p dF90YWJsZVtpXS52YWx1ZSA+IC0xKQorCQkJKih1OCAqKShpbml0X2RhdGFfYnVmICsgZXNwX2lu aXRfdGFibGVbaV0ub2Zmc2V0KSA9IGVzcF9pbml0X3RhYmxlW2ldLnZhbHVlOworCX0KK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmggYi9kcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYmE5OTQ2ZDY0YzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5n L2VzcDgwODkvZXNwX2ZpbGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDEwIC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgorICogQ29weXJpZ2h0IChjKSAyMDE3IEZy ZWUgRWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVl LWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRl ZiBfRVNQX0ZJTEVfSF8KKyNkZWZpbmUgX0VTUF9GSUxFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9m aXJtd2FyZS5oPgorCisjZGVmaW5lIENPTkZfQVRUUl9MRU4JCTI0CisjZGVmaW5lIE1BWF9BVFRS X05VTQkJMjQKKyNkZWZpbmUgTUFYX0ZJWF9BVFRSX05VTQkxNgorCitzdHJ1Y3QgZXNwX2luaXRf dGFibGVfZWxlbSB7CisJY2hhciBhdHRyW0NPTkZfQVRUUl9MRU5dOworCWludCBvZmZzZXQ7CisJ c2hvcnQgdmFsdWU7Cit9OworCitpbnQgcmVxdWVzdF9pbml0X2NvbmYoc3RydWN0IGRldmljZSAq ZGV2KTsKK3ZvaWQgZml4X2luaXRfZGF0YSh1OCAqaW5pdF9kYXRhX2J1ZiwgaW50IGJ1Zl9zaXpl KTsKKworI2VuZGlmCQkJCS8qIF9FU1BfRklMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvZXNwX2luaXRfZGF0YS5oIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX2luaXRfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MjQ5NGMwMmExMGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX2luaXRfZGF0YS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MDkgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBF bGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxl Y3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCitzdGF0aWMgY2hh ciBlc3BfaW5pdF9kYXRhW10gPSB7IDB4NSwgMHgwLCA0LCAyLCA1LCA1LCA1LCAyLCA1LCAwLCA0 LCA1LCA1LCA0LCA1LCA1LCA0LCAtMiwgLTMsIC0xLAorCS0xNiwgLTE2LCAtMTYsIC0zMiwgLTMy LCAtMzIsIDIwNCwgMSwgMHhmZiwgMHhmZiwgMCwgMCwgMCwgMCwgODIsIDc4LCA3NCwgNjgsIDY0 LCA1NiwgMCwKKwkwLCAxLCAxLCAyLCAzLCA0LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDEwLCAweDAsIDB4MCwKKwkwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCB9 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2lvLmMgYi9kcml2ZXJz L3N0YWdpbmcvZXNwODA4OS9lc3BfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjc1NmJkNjI2MGIyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L2VzcF9pby5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDA5IC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgorICogQ29weXJpZ2h0IChjKSAyMDE3IEZy ZWUgRWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVl LWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KKyNpbmNsdWRlICJlc3Bfc2lmLmgiCisjaW5jbHVk ZSAic2xjX2hvc3RfcmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJlc3BfZGVidWcuaCIKKworaW50IGVz cF9jb21tb25fcmVhZChzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbiwgaW50 IHN5bmMsCisJCSAgICBib29sIG5vcm91bmQpCit7CisJaWYgKHN5bmMpCisJCXJldHVybiBzaWZf bGxkZXNjX3JlYWRfc3luYyhlcHViLCBidWYsIGxlbik7CisKKwlyZXR1cm4gc2lmX2xsZGVzY19y ZWFkX3JhdyhlcHViLCBidWYsIGxlbiwgbm9yb3VuZCk7Cit9CisKK2ludCBlc3BfY29tbW9uX3dy aXRlKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuLCBpbnQgc3luYykKK3sK KwlpZiAoc3luYykKKwkJcmV0dXJuIHNpZl9sbGRlc2Nfd3JpdGVfc3luYyhlcHViLCBidWYsIGxl bik7CisKKwlyZXR1cm4gc2lmX2xsZGVzY193cml0ZV9yYXcoZXB1YiwgYnVmLCBsZW4pOworfQor CitpbnQgZXNwX2NvbW1vbl9yZWFkX3dpdGhfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMy IGFkZHIsIHU4ICpidWYsIHUzMiBsZW4sCisJCQkgICAgICBpbnQgc3luYykKK3sKKwlpZiAoc3lu YykKKwkJcmV0dXJuIHNpZl9pb19zeW5jKGVwdWIsIGFkZHIsIGJ1ZiwgbGVuLCBTSUZfRlJPTV9E RVZJQ0UgfAorCQkJCSAgIFNJRl9TWU5DIHwgU0lGX0JZVEVfQkFTSVMgfCBTSUZfSU5DX0FERFIp OworCisJcmV0dXJuIHNpZl9pb19yYXcoZXB1YiwgYWRkciwgYnVmLCBsZW4sIFNJRl9GUk9NX0RF VklDRSB8CisJCQkgIFNJRl9CWVRFX0JBU0lTIHwgU0lGX0lOQ19BRERSKTsKK30KKworaW50IGVz cF9jb21tb25fd3JpdGVfd2l0aF9hZGRyKHN0cnVjdCBlc3BfcHViICplcHViLCB1MzIgYWRkciwg dTggKmJ1ZiwKKwkJCSAgICAgICB1MzIgbGVuLCBpbnQgc3luYykKK3sKKwlpZiAoc3luYykKKwkJ cmV0dXJuIHNpZl9pb19zeW5jKGVwdWIsIGFkZHIsIGJ1ZiwgbGVuLCBTSUZfVE9fREVWSUNFIHwK KwkJCQkgICBTSUZfU1lOQyB8IFNJRl9CWVRFX0JBU0lTIHwgU0lGX0lOQ19BRERSKTsKKworCXJl dHVybiBzaWZfaW9fcmF3KGVwdWIsIGFkZHIsIGJ1ZiwgbGVuLCBTSUZfVE9fREVWSUNFIHwgU0lG X0JZVEVfQkFTSVMgfAorCQkJICBTSUZfSU5DX0FERFIpOworfQorCitpbnQgZXNwX2NvbW1vbl9y ZWFkYnl0ZV93aXRoX2FkZHIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVm LAorCQkJCSAgaW50IHN5bmMpCit7CisJaW50IHJlczsKKworCWlmIChzeW5jKQorCQlzaWZfbG9j a19idXMoZXB1Yik7CisKKwkqYnVmID0gc2Rpb19pb19yZWFkYihlcHViLCBhZGRyLCAmcmVzKTsK KworCWlmIChzeW5jKQorCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKKworCXJldHVybiByZXM7Cit9 CisKK2ludCBlc3BfY29tbW9uX3dyaXRlYnl0ZV93aXRoX2FkZHIoc3RydWN0IGVzcF9wdWIgKmVw dWIsIHUzMiBhZGRyLCB1OCBidWYsCisJCQkJICAgaW50IHN5bmMpCit7CisJaW50IHJlczsKKwor CWlmIChzeW5jKQorCQlzaWZfbG9ja19idXMoZXB1Yik7CisKKwlzZGlvX2lvX3dyaXRlYihlcHVi LCBidWYsIGFkZHIsICZyZXMpOworCisJaWYgKHN5bmMpCisJCXNpZl91bmxvY2tfYnVzKGVwdWIp OworCisJcmV0dXJuIHJlczsKK30KKworZW51bSBfU0RJT19JTlRSX01PREUgeworCVNESU9fSU5U Ul9JQiA9IDAsCisJU0RJT19JTlRSX09PQl9UT0dHTEUsCisJU0RJT19JTlRSX09PQl9ISUdIX0xF VkVMLAorCVNESU9fSU5UUl9PT0JfTE9XX0xFVkVMLAorfTsKKworI2RlZmluZSBHRU5fR1BJT19T RUwoX2dwaW9fbnVtLCBfc2VsX2Z1bmMsIF9pbnRyX21vZGUsIF9vZmZzZXQpICgoKF9vZmZzZXQp IDw8IDkpIHwgKChfaW50cl9tb2RlKSA8PCA3KSB8ICgoX3NlbF9mdW5jKSA8PCA0KSB8IChfZ3Bp b19udW0pKQorLy9iaXRbMzowXSA9IGdwaW8gbnVtLCAyCisvL2JpdFs2OjRdID0gZ3BpbyBzZWwg ZnVuYywgMAorLy9iaXRbODo3XSA9IGdwaW8gaW50ciBtb2RlLCBTRElPX0lOVFJfT09CX1RPR0dM RQorLy9iaXRbMTU6OV0gPSByZWdpc3RlciBvZmZzZXQsIDB4MzgKKwordTE2IGdwaW9fc2VsX3Nl dHNbMTddID0geworCUdFTl9HUElPX1NFTCgwLCAwLCBTRElPX0lOVFJfT09CX1RPR0dMRSwgMHgz NCksCS8vR1BJTzAKKwlHRU5fR1BJT19TRUwoMSwgMywgU0RJT19JTlRSX09PQl9UT0dHTEUsIDB4 MTgpLAkvL1UwVFhECisJR0VOX0dQSU9fU0VMKDIsIDAsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAw eDM4KSwJLy9HUElPMgorCUdFTl9HUElPX1NFTCgzLCAzLCBTRElPX0lOVFJfT09CX1RPR0dMRSwg MHgxNCksCS8vVTBSWEQKKwlHRU5fR1BJT19TRUwoNCwgMCwgU0RJT19JTlRSX09PQl9UT0dHTEUs IDB4M0MpLAkvL0dQSU80CisJR0VOX0dQSU9fU0VMKDUsIDAsIFNESU9fSU5UUl9PT0JfVE9HR0xF LCAweDQwKSwJLy9HUElPNQorCUdFTl9HUElPX1NFTCg2LCAzLCBTRElPX0lOVFJfT09CX1RPR0dM RSwgMHgxQyksCS8vU0RfQ0xLCisJR0VOX0dQSU9fU0VMKDcsIDMsIFNESU9fSU5UUl9PT0JfVE9H R0xFLCAweDIwKSwJLy9TRF9EQVRBMAorCUdFTl9HUElPX1NFTCg4LCAzLCBTRElPX0lOVFJfT09C X1RPR0dMRSwgMHgyNCksCS8vU0RfREFUQTEKKwlHRU5fR1BJT19TRUwoOSwgMywgU0RJT19JTlRS X09PQl9UT0dHTEUsIDB4MjgpLAkvL1NEX0RBVEEyCisJR0VOX0dQSU9fU0VMKDEwLCAzLCBTRElP X0lOVFJfT09CX1RPR0dMRSwgMHgyQyksCS8vU0RfREFUQTMKKwlHRU5fR1BJT19TRUwoMTEsIDMs IFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDMwKSwJLy9TRF9DTUQKKwlHRU5fR1BJT19TRUwoMTIs IDMsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDA0KSwJLy9NVERJCisJR0VOX0dQSU9fU0VMKDEz LCAzLCBTRElPX0lOVFJfT09CX1RPR0dMRSwgMHgwOCksCS8vTVRDSworCUdFTl9HUElPX1NFTCgx NCwgMywgU0RJT19JTlRSX09PQl9UT0dHTEUsIDB4MEMpLAkvL01UTVMKKwlHRU5fR1BJT19TRUwo MTUsIDMsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDEwKSwJLy9NVERPCisJLy9wbHMgZG8gbm90 IGNoYW5nZSBzZWwgYmVmb3JlLCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaW50ciBtb2RlLGNoYW5n ZSB0aGUgb25lIGJsb3cKKwkvL0dFTl9HUElPX1NFTCgyLCAwLCBTRElPX0lOVFJfT09CX1RPR0dM RSwgMHgzOCkKKwlHRU5fR1BJT19TRUwoMiwgMCwgU0RJT19JTlRSX09PQl9MT1dfTEVWRUwsIDB4 MzgpCit9OworCitpbnQgc2lmX2ludGVycnVwdF90YXJnZXQoc3RydWN0IGVzcF9wdWIgKmVwdWIs IHU4IGluZGV4KQoreworCXU4IGxvd19ieXRlID0gQklUKGluZGV4KTsKKwlyZXR1cm4gZXNwX2Nv bW1vbl93cml0ZWJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0NPTkZfVzQgKyAyLAorCQkJ CQkgICAgICBsb3dfYnl0ZSwgRVNQX1NJRl9OT1NZTkMpOworfQorCit2b2lkIGNoZWNrX3Rhcmdl dF9pZChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sKKwl1MzIgZGF0ZTsKKwlpbnQgaTsKKwl1MTYg Z3Bpb19zZWw7CisJdTggYnl0ZTIgPSAwLCBieXRlMyA9IDA7CisKKwlpZiAoIWVwdWIgfHwgIWVw dWItPnNpZikKKwkJcmV0dXJuOworCisJc2lmX2xvY2tfYnVzKGVwdWIpOworCisJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgeworCQllc3BfY29tbW9uX3JlYWRieXRlX3dpdGhfYWRkcihlcHViLCBT TENfSE9TVF9EQVRFICsgaSwKKwkJCQkJICAgICAgKHU4ICopJmRhdGUgKyBpLCBFU1BfU0lGX05P U1lOQyk7CisJCWVzcF9jb21tb25fcmVhZGJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0lE ICsgaSwKKwkJCQkJICAgICAgKHU4ICopJmVwdWItPnNpZi0+dGFyZ2V0X2lkICsgaSwKKwkJCQkJ ICAgICAgRVNQX1NJRl9OT1NZTkMpOworCX0KKworCXNpZl91bmxvY2tfYnVzKGVwdWIpOworCisJ c3dpdGNoIChlcHViLT5zaWYtPnRhcmdldF9pZCkgeworCWNhc2UgMHgxMDA6CisJCWVwdWItPnNp Zi0+c2xjX3dpbmRvd19lbmRfYWRkciA9IDB4MjAwMDA7CisJCWJyZWFrOworCWNhc2UgMHg2MDA6 CisJCWVwdWItPnNpZi0+c2xjX3dpbmRvd19lbmRfYWRkciA9IDB4MjAwMDAgLSAweDgwMDsKKwor CQlpZiAoc2lmX2dldF9idF9jb25maWcoKSA9PSAxICYmIHNpZl9nZXRfcnN0X2NvbmZpZygpICE9 IDEpIHsKKwkJCXU4IGdwaW9fbnVtID0gc2lmX2dldF93YWtldXBfZ3Bpb19jb25maWcoKTsKKwkJ CWdwaW9fc2VsID0gZ3Bpb19zZWxfc2V0c1tncGlvX251bV07CisJCQlieXRlMiA9IGdwaW9fc2Vs OworCQkJYnl0ZTMgPSBncGlvX3NlbCA+PiA4OworCQl9CisKKwkJc2lmX2xvY2tfYnVzKGVwdWIp OworCQllc3BfY29tbW9uX3dyaXRlYnl0ZV93aXRoX2FkZHIoZXB1YiwgU0xDX0hPU1RfQ09ORl9X MSwgMCwKKwkJCQkJICAgICAgIEVTUF9TSUZfTk9TWU5DKTsKKwkJZXNwX2NvbW1vbl93cml0ZWJ5 dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0NPTkZfVzEgKyAxLCAwLAorCQkJCQkgICAgICAg RVNQX1NJRl9OT1NZTkMpOworCQllc3BfY29tbW9uX3dyaXRlYnl0ZV93aXRoX2FkZHIoZXB1Yiwg U0xDX0hPU1RfQ09ORl9XMSArIDIsCisJCQkJCSAgICAgICBieXRlMiwgRVNQX1NJRl9OT1NZTkMp OworCQllc3BfY29tbW9uX3dyaXRlYnl0ZV93aXRoX2FkZHIoZXB1YiwgU0xDX0hPU1RfQ09ORl9X MSArIDMsCisJCQkJCSAgICAgICBieXRlMywgRVNQX1NJRl9OT1NZTkMpOworCQlzaWZfdW5sb2Nr X2J1cyhlcHViKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXB1Yi0+c2lmLT5zbGNfd2luZG93 X2VuZF9hZGRyID0gMHgyMDAwMDsKKwkJYnJlYWs7CisJfQorfQorCit1MzIgc2lmX2dldF9ibGtz eihzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sKKwlpZiAoIWVwdWIgfHwgIWVwdWItPnNpZikKKwkJ cmV0dXJuIDUxMjsKKworCXJldHVybiBlcHViLT5zaWYtPnNsY19ibGtfc3o7Cit9CisKK3ZvaWQg c2lmX2RzcihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCBlc3Bfc2Rpb19jdHJs ICpzY3RybCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisJc3RydWN0IHNsY19ob3N0X3JlZ3Mg KnJlZ3MgPSAmc2N0cmwtPnNsY19yZWdzOworCWludCByZXQ7CisKKwlzZGlvX3JlbGVhc2VfaG9z dChzY3RybC0+ZnVuYyk7CisKKwlzaWZfbG9ja19idXMoc2N0cmwtPmVwdWIpOworCW1lbXNldChy ZWdzLCAwLCBzaXplb2Yoc3RydWN0IHNsY19ob3N0X3JlZ3MpKTsKKworCXJldCA9IGVzcF9jb21t b25fcmVhZF93aXRoX2FkZHIoc2N0cmwtPmVwdWIsIFJFR19TTENfSE9TVF9CQVNFICsgOCwKKwkJ CQkJKHU4ICopcmVncywgc2l6ZW9mKCpyZWdzKSwKKwkJCQkJRVNQX1NJRl9OT1NZTkMpOworCisJ aWYgKHJlZ3MtPmludHJfcmF3ICYgU0xDX0hPU1RfUlhfU1QgJiYgIXJldCkKKwkJZXNwX2Rzcihz Y3RybC0+ZXB1Yik7CisJZWxzZQorCQlzaWZfdW5sb2NrX2J1cyhzY3RybC0+ZXB1Yik7CisKKwkv KiBGSVhNRTogbWlzc2luZyB1bmxvY2tfYnVzPyAqLworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsK KwlhdG9taWNfc2V0KCZzY3RybC0+aXJxX2hhbmRsaW5nLCAwKTsKK30KKworc3RydWN0IHNsY19o b3N0X3JlZ3MgKnNpZl9nZXRfcmVncyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sKKwlpZiAoIWVw dWIgfHwgIWVwdWItPnNpZikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJmVwdWItPnNpZi0+ c2xjX3JlZ3M7Cit9CisKK3ZvaWQgc2lmX2Rpc2FibGVfdGFyZ2V0X2ludGVycnVwdChzdHJ1Y3Qg ZXNwX3B1YiAqZXB1YikKK3sKKwlpZiAoIWVwdWIgfHwgIWVwdWItPnNpZiB8fCAhZXB1Yi0+c2lm LT5mdW5jKQorCQlyZXR1cm47CisKKwlzaWZfbG9ja19idXMoZXB1Yik7CisjaWZkZWYgSE9TVF9S RVNFVF9CVUcKKwltZGVsYXkoMTApOworI2VuZGlmCisJbWVtc2V0KGVwdWItPnNpZi0+ZG1hX2J1 ZmZlciwgMCwgc2l6ZW9mKHUzMikpOworCWVzcF9jb21tb25fd3JpdGVfd2l0aF9hZGRyKGVwdWIs IFNMQ19IT1NUX0lOVF9FTkEsCisJCQkJICAgZXB1Yi0+c2lmLT5kbWFfYnVmZmVyLCBzaXplb2Yo dTMyKSwKKwkJCQkgICBFU1BfU0lGX05PU1lOQyk7CisjaWZkZWYgSE9TVF9SRVNFVF9CVUcKKwlt ZGVsYXkoMTApOworI2VuZGlmCisKKwlzaWZfdW5sb2NrX2J1cyhlcHViKTsKKworCW1kZWxheSgx KTsKKworCXNpZl9sb2NrX2J1cyhlcHViKTsKKwlzaWZfaW50ZXJydXB0X3RhcmdldChlcHViLCA3 KTsKKwlzaWZfdW5sb2NrX2J1cyhlcHViKTsKK30KKworLyogRklYTUU6IE1FSCAqLworCitzdGF0 aWMgaW50IGJ0X2NvbmZpZzsKK3ZvaWQgc2lmX3JlY29yZF9idF9jb25maWcoaW50IHZhbHVlKQor eworCWJ0X2NvbmZpZyA9IHZhbHVlOworfQorCitpbnQgc2lmX2dldF9idF9jb25maWcodm9pZCkK K3sKKwlyZXR1cm4gYnRfY29uZmlnOworfQorCitzdGF0aWMgaW50IHJzdF9jb25maWc7Cit2b2lk IHNpZl9yZWNvcmRfcnN0X2NvbmZpZyhpbnQgdmFsdWUpCit7CisJcnN0X2NvbmZpZyA9IHZhbHVl OworfQorCitpbnQgc2lmX2dldF9yc3RfY29uZmlnKHZvaWQpCit7CisJcmV0dXJuIHJzdF9jb25m aWc7Cit9CisKK3N0YXRpYyBpbnQgYXRlX3Rlc3Q7Cit2b2lkIHNpZl9yZWNvcmRfYXRlX2NvbmZp ZyhpbnQgdmFsdWUpCit7CisJYXRlX3Rlc3QgPSB2YWx1ZTsKK30KKworaW50IHNpZl9nZXRfYXRl X2NvbmZpZyh2b2lkKQoreworCXJldHVybiBhdGVfdGVzdDsKK30KKworc3RhdGljIGludCB3YWtl dXBfZ3BpbyA9IDEyOwordm9pZCBzaWZfcmVjb3JkX3dha2V1cF9ncGlvX2NvbmZpZyhpbnQgdmFs dWUpCit7CisJd2FrZXVwX2dwaW8gPSB2YWx1ZTsKK30KKworaW50IHNpZl9nZXRfd2FrZXVwX2dw aW9fY29uZmlnKHZvaWQpCit7CisJcmV0dXJuIHdha2V1cF9ncGlvOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcv ZXNwODA4OS9lc3BfbWFjODAyMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmZkNTA0OWZjMWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L2VzcF9tYWM4MDIxMS5jCkBAIC0wLDAgKzEsMTQ5NiBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KKyAqIENvcHlyaWdodCAoYykgMjAx NyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpA ZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNp bmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Cisj aW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L3JlZ3VsYXRvcnkuaD4KKyNp bmNsdWRlICJlc3BfcHViLmgiCisjaW5jbHVkZSAiZXNwX3NpcC5oIgorI2luY2x1ZGUgImVzcF9j dHJsLmgiCisjaW5jbHVkZSAiZXNwX3NpZi5oIgorI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgorI2lu Y2x1ZGUgImVzcF93bC5oIgorI2luY2x1ZGUgImVzcF91dGlscy5oIgorCitzdGF0aWMgdTggZXNw X21hY19hZGRyW0VUSF9BTEVOICogMl07CitzdGF0aWMgdTggZ2V0YWRkcl9pbmRleCh1OCAqYWRk ciwgc3RydWN0IGVzcF9wdWIgKmVwdWIpOworCisvKkhhbmRsZXIgdGhhdCA4MDIuMTEgbW9kdWxl IGNhbGxzIGZvciBlYWNoIHRyYW5zbWl0dGVkIGZyYW1lLgorc2tiIGNvbnRhaW5zIHRoZSBidWZm ZXIgc3RhcnRpbmcgZnJvbSB0aGUgSUVFRSA4MDIuMTEgaGVhZGVyLgorVGhlIGxvdy1sZXZlbCBk cml2ZXIgc2hvdWxkIHNlbmQgdGhlIGZyYW1lIG91dCBiYXNlZCBvbgorY29uZmlndXJhdGlvbiBp biB0aGUgVFggY29udHJvbCBkYXRhLiBUaGlzIGhhbmRsZXIgc2hvdWxkLAorcHJlZmVyYWJseSwg bmV2ZXIgZmFpbCBhbmQgc3RvcCBxdWV1ZXMgYXBwcm9wcmlhdGVseS4KK011c3QgYmUgYXRvbWlj LiovCitzdGF0aWMgdm9pZCBlc3Bfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAg ICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwgc3RydWN0IHNrX2J1ZmYg KnNrYikKK3sKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5w cml2OworCisJc2lwX3R4X2RhdGFfcGt0X2VucXVldWUoZXB1Yiwgc2tiKTsKKwlpZiAoZXB1YikK KwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZlcHViLT50eF93b3JrKTsKK30KKworLyoKKyAg IENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdh cmUKKyAgIDI5MzQgICogICAgICBpcyBlbmFibGVkLiBUaGlzIHNob3VsZCB0dXJuIG9uIHRoZSBo YXJkd2FyZSBhbmQgbXVzdCB0dXJuIG9uCisgICAyOTM1ICAqICAgICAgZnJhbWUgcmVjZXB0aW9u IChmb3IgcG9zc2libHkgZW5hYmxlZCBtb25pdG9yIGludGVyZmFjZXMuKQorICAgMjkzNiAgKiAg ICAgIFJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZXMsIHRoZXNlIG1heSBiZSBzZWVuIGluIHVz ZXJzcGFjZSwKKyAgIDI5MzcgICogICAgICBvciB6ZXJvLgorICAgMjkzOCAgKiAgICAgIFdoZW4g dGhlIGRldmljZSBpcyBzdGFydGVkIGl0IHNob3VsZCBub3QgaGF2ZSBhIE1BQyBhZGRyZXNzCisg ICAyOTM5ICAqICAgICAgdG8gYXZvaWQgYWNrbm93bGVkZ2luZyBmcmFtZXMgYmVmb3JlIGEgbm9u LW1vbml0b3IgZGV2aWNlCisgICAyOTQwICAqICAgICAgaXMgYWRkZWQuCisgICAyOTQxICAqICAg ICAgTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgorKi8KK3N0YXRpYyBpbnQgZXNw X29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBlc3BfcHViICpl cHViOworCisJaWYgKCFodyB8fCAhaHctPnByaXYpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCisJLyphZGQgcmZraWxsIHBv bGwgZnVuY3Rpb24gKi8KKworCWF0b21pY19zZXQoJmVwdWItPndsLm9mZiwgMCk7CisJd2lwaHlf cmZraWxsX3N0YXJ0X3BvbGxpbmcoaHctPndpcGh5KTsKKworCXJldHVybiAwOworfQorCisvKgor Q2FsbGVkIGFmdGVyIGxhc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQorMjk0 NCAgKiAgICAgIGlzIGRpc2FibGVkLiBUaGlzIHNob3VsZCB0dXJuIG9mZiB0aGUgaGFyZHdhcmUg KGF0IGxlYXN0CisyOTQ1ICAqICAgICAgaXQgbXVzdCB0dXJuIG9mZiBmcmFtZSByZWNlcHRpb24u KQorMjk0NiAgKiAgICAgIE1heSBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgYWRkX2ludGVyZmFjZSBp ZiB0aGF0IHJlamVjdHMKKzI5NDcgICogICAgICBhbiBpbnRlcmZhY2UuIElmIHlvdSBhZGRlZCBh bnkgd29yayBvbnRvIHRoZSBtYWM4MDIxMSB3b3JrcXVldWUKKzI5NDggICogICAgICB5b3Ugc2hv dWxkIGVuc3VyZSB0byBjYW5jZWwgaXQgb24gdGhpcyBjYWxsYmFjay4KKzI5NDkgICogICAgICBN dXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCisqLworc3RhdGljIHZvaWQgZXNwX29w X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWI7 CisKKwlpZiAoIWh3IHx8ICFody0+cHJpdikgeworCQlyZXR1cm47CisJfQorCisJZXB1YiA9IChz dHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCWF0b21pY19zZXQoJmVwdWItPndsLm9mZiwgMSk7 CisKKyNpZmRlZiBIT1NUX1JFU0VUX0JVRworCW1kZWxheSgyMDApOworI2VuZGlmCisKKwlpZiAo ZXB1Yi0+d2wuc2Nhbl9yZXEpIHsKKwkJaHdfc2Nhbl9kb25lKGVwdWIsIHRydWUpOworCQllcHVi LT53bC5zY2FuX3JlcSA9IE5VTEw7CisJCS8vbXNsZWVwKDIpOworCX0KKworCS8qIEZJWE1FOiBk b2VzIHRoaXMgJ3R1cm4gb2ZmIGZyYW1lIHJlY2VwdGlvbic/ICovCisJd2lwaHlfcmZraWxsX3N0 b3BfcG9sbGluZyhody0+d2lwaHkpOworCS8qIEZJWE1FOiBmbHVzaCBxdWV1ZXM/ICovCit9CisK K3N0YXRpYyBpbnQgZXNwX3NldF9zdmlmX21vZGUoc3RydWN0IHNpcF9jbWRfc2V0dmlmICpzdmlm LAorCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIGJvb2wgcDJwKQoreworCXN3aXRj aCAodHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJc3ZpZi0+b3BfbW9k ZSA9IDA7CisJCXN2aWYtPmlzX3AycCA9IHAycDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFf SUZUWVBFX0FQOgorCQlzdmlmLT5vcF9tb2RlID0gMTsKKwkJc3ZpZi0+aXNfcDJwID0gcDJwOwor CQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwkJc3ZpZi0+b3Bf bW9kZSA9IDA7CisJCXN2aWYtPmlzX3AycCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjEx X0lGVFlQRV9QMlBfR086CisJCXN2aWYtPm9wX21vZGUgPSAxOworCQlzdmlmLT5pc19wMnAgPSAx OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoKK0NhbGxlZCB3aGVuIGEgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRo ZSBoYXJkd2FyZSBpcworMjk3MyAgKiAgICAgIGVuYWJsZWQuIEJlY2F1c2UgaXQgaXMgbm90IGNh bGxlZCBmb3IgbW9uaXRvciBtb2RlIGRldmljZXMsIEBzdGFydAorMjk3NCAgKiAgICAgIGFuZCBA c3RvcCBtdXN0IGJlIGltcGxlbWVudGVkLgorMjk3NSAgKiAgICAgIFRoZSBkcml2ZXIgc2hvdWxk IHBlcmZvcm0gYW55IGluaXRpYWxpemF0aW9uIGl0IG5lZWRzIGJlZm9yZQorMjk3NiAgKiAgICAg IHRoZSBkZXZpY2UgY2FuIGJlIGVuYWJsZWQuIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZm9y IHRoZQorMjk3NyAgKiAgICAgIGludGVyZmFjZSBpcyBnaXZlbiBpbiB0aGUgY29uZiBwYXJhbWV0 ZXIuCisyOTc4ICAqICAgICAgVGhlIGNhbGxiYWNrIG1heSByZWZ1c2UgdG8gYWRkIGFuIGludGVy ZmFjZSBieSByZXR1cm5pbmcgYQorMjk3OSAgKiAgICAgIG5lZ2F0aXZlIGVycm9yIGNvZGUgKHdo aWNoIHdpbGwgYmUgc2VlbiBpbiB1c2Vyc3BhY2UuKQorMjk4MCAgKiAgICAgIE11c3QgYmUgaW1w bGVtZW50ZWQgYW5kIGNhbiBzbGVlcC4KKyAgICovCitzdGF0aWMgaW50IGVzcF9vcF9hZGRfaW50 ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+ cHJpdjsKKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ZHJ2 X3ByaXY7CisJc3RydWN0IHNpcF9jbWRfc2V0dmlmIHN2aWY7CisJaW50IHJldDsKKworCW1lbWNw eShzdmlmLm1hYywgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJc3ZpZi5pbmRleCA9IGdldGFkZHJf aW5kZXgodmlmLT5hZGRyLCBlcHViKTsKKwlldmlmLT5pbmRleCA9IHN2aWYuaW5kZXg7CisJZXZp Zi0+ZXB1YiA9IGVwdWI7CisJLyogRklYTUU6IHdoeSBhIG5lZWQgZm9yIGV2aWY/ICovCisJZXB1 Yi0+dmlmID0gdmlmOworCXN2aWYuc2V0ID0gMTsKKworCWlmIChzdmlmLmluZGV4ID09IEVTUF9Q VUJfTUFYX1ZJRikgeworCQlkZXZfZXJyKGVwdWItPmRldiwgInN1cHBvcnQgZm9yIE1BWCAlZCBp bnRlcmZhY2VzXG4iLAorCQkJRVNQX1BVQl9NQVhfVklGKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQ OworCX0KKworCWlmIChCSVQoc3ZpZi5pbmRleCkgJiBlcHViLT52aWZfc2xvdCkgeworCQlkZXZf ZXJyKGVwdWItPmRldiwgImludGVyZmFjZSAlZCBhbHJlYWR5IHVzZWRcbiIsIHN2aWYuaW5kZXgp OworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJZXB1Yi0+dmlmX3Nsb3QgfD0gQklUKHN2 aWYuaW5kZXgpOworCisJcmV0ID0gZXNwX3NldF9zdmlmX21vZGUoJnN2aWYsIHZpZi0+dHlwZSwg ZmFsc2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZXB1Yi0+ZGV2LCAibm8gc3VwcG9y dCBmb3IgaW50ZXJmYWNlIHR5cGUgJWRcbiIsCisJCQl2aWYtPnR5cGUpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXNpcF9jbWQoZXB1YiwgU0lQX0NNRF9TRVRWSUYsICh1OCAqKSZzdmlmLCBzaXpl b2Yoc3ZpZikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCitDYWxsZWQgd2hlbiBhIG5ldGRldmlj ZSBjaGFuZ2VzIHR5cGUuIFRoaXMgY2FsbGJhY2sKKzI5ODMgICogICAgICBpcyBvcHRpb25hbCwg YnV0IG9ubHkgaWYgaXQgaXMgc3VwcG9ydGVkIGNhbiBpbnRlcmZhY2UgdHlwZXMgYmUKKzI5ODQg ICogICAgICBzd2l0Y2hlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIFVQLiBUaGUgY2FsbGJhY2sg bWF5IHNsZWVwLgorMjk4NSAgKiAgICAgIE5vdGUgdGhhdCB3aGlsZSBhbiBpbnRlcmZhY2UgaXMg YmVpbmcgc3dpdGNoZWQsIGl0IHdpbGwgbm90IGJlCisyOTg2ICAqICAgICAgZm91bmQgYnkgdGhl IGludGVyZmFjZSBpdGVyYXRpb24gY2FsbGJhY2tzLgorICAgKi8KK3N0YXRpYyBpbnQgZXNwX29w X2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIG5ld190eXBl LCBib29sIHAycCkKK3sKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAq KWh3LT5wcml2OworCXN0cnVjdCBlc3BfdmlmICpldmlmID0gKHN0cnVjdCBlc3BfdmlmICopdmlm LT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgc2lwX2NtZF9zZXR2aWYgc3ZpZjsKKwlpbnQgcmV0OworCisJ bWVtY3B5KHN2aWYubWFjLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwlzdmlmLmluZGV4ID0gZXZp Zi0+aW5kZXg7CisJc3ZpZi5zZXQgPSAyOworCisJcmV0ID0gZXNwX3NldF9zdmlmX21vZGUoJnN2 aWYsIG5ld190eXBlLCBwMnApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc2lw X2NtZChlcHViLCBTSVBfQ01EX1NFVFZJRiwgKHU4ICopJnN2aWYsIHNpemVvZihzdmlmKSk7CisK KwlyZXR1cm4gMDsKK30KKworLyoKKyAgIE5vdGlmaWVzIGEgZHJpdmVyIHRoYXQgYW4gaW50ZXJm YWNlIGlzIGdvaW5nIGRvd24uCisgICAyOTg5ICAqICAgICAgVGhlIEBzdG9wIGNhbGxiYWNrIGlz IGNhbGxlZCBhZnRlciB0aGlzIGlmIGl0IGlzIHRoZSBsYXN0IGludGVyZmFjZQorICAgMjk5MCAg KiAgICAgIGFuZCBubyBtb25pdG9yIGludGVyZmFjZXMgYXJlIHByZXNlbnQuCisgICAyOTkxICAq ICAgICAgV2hlbiBhbGwgaW50ZXJmYWNlcyBhcmUgcmVtb3ZlZCwgdGhlIE1BQyBhZGRyZXNzIGlu IHRoZSBoYXJkd2FyZQorICAgMjk5MiAgKiAgICAgIG11c3QgYmUgY2xlYXJlZCBzbyB0aGUgZGV2 aWNlIG5vIGxvbmdlciBhY2tub3dsZWRnZXMgcGFja2V0cywKKyAgIDI5OTMgICogICAgICB0aGUg bWFjX2FkZHIgbWVtYmVyIG9mIHRoZSBjb25mIHN0cnVjdHVyZSBpcywgaG93ZXZlciwgc2V0IHRv IHRoZQorICAgMjk5NCAgKiAgICAgIE1BQyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgZ29pbmcgYXdh eS4KKyAgIDI5OTUgICogICAgICBIZW5jZSwgdGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVu dGVkLiBJdCBjYW4gc2xlZXAuCisgICAqLworc3RhdGljIHZvaWQgZXNwX29wX3JlbW92ZV9pbnRl cmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilo dy0+cHJpdjsKKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ ZHJ2X3ByaXY7CisJc3RydWN0IHNpcF9jbWRfc2V0dmlmIHN2aWYgPSB7MH07CisKKwlzdmlmLmlu ZGV4ID0gZXZpZi0+aW5kZXg7CisJZXB1Yi0+dmlmX3Nsb3QgJj0gfkJJVChzdmlmLmluZGV4KTsK KworCWlmIChldmlmLT5hcF91cCkgeworCQlldmlmLT5iZWFjb25faW50ZXJ2YWwgPSAwOworCQlk ZWxfdGltZXJfc3luYygmZXZpZi0+YmVhY29uX3RpbWVyKTsKKwkJZXZpZi0+YXBfdXAgPSBmYWxz ZTsKKwl9CisKKwllcHViLT52aWYgPSBOVUxMOworCWV2aWYtPmVwdWIgPSBOVUxMOworCisJc2lw X2NtZChlcHViLCBTSVBfQ01EX1NFVFZJRiwgKHU4ICopJnN2aWYsIHNpemVvZihzdmlmKSk7CisJ LyogVE9ETzogY2xlYW4gdXAgdHgvcnggcXVldWUgKi8KK30KKworLyogRklYTUU6IFdURj8gKi8K KworI2RlZmluZSBCRUFDT05fVElNX1NBVkVfTUFYIDIwCit1OCBiZWFjb25fdGltX3NhdmVkW0JF QUNPTl9USU1fU0FWRV9NQVhdOworaW50IGJlYWNvbl90aW1fY291bnQ7CitzdGF0aWMgdm9pZCBi ZWFjb25fdGltX2luaXQodm9pZCkKK3sKKwltZW1zZXQoYmVhY29uX3RpbV9zYXZlZCwgMCwgQkVB Q09OX1RJTV9TQVZFX01BWCk7CisJYmVhY29uX3RpbV9jb3VudCA9IDA7Cit9CisKK3N0YXRpYyB1 OCBiZWFjb25fdGltX3NhdmUodTggdGhpc190aW0pCit7CisJdTggYWxsX3RpbSA9IDA7CisJaW50 IGk7CisKKwliZWFjb25fdGltX3NhdmVkW2JlYWNvbl90aW1fY291bnRdID0gdGhpc190aW07CisK KwliZWFjb25fdGltX2NvdW50ID0gKGJlYWNvbl90aW1fY291bnQgKyAxKSAlIEJFQUNPTl9USU1f U0FWRV9NQVg7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1RJTV9TQVZFX01BWDsgaSsrKQor CQlhbGxfdGltIHw9IGJlYWNvbl90aW1fc2F2ZWRbaV07CisKKwlyZXR1cm4gYWxsX3RpbTsKK30K Kworc3RhdGljIGJvb2wgYmVhY29uX3RpbV9hbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQor eworCXU4ICpwLCAqdGltX2VuZDsKKwl1OCB0aW1fY291bnQ7CisJaW50IGxlbiwgcmVtYWluX2xl bjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisKKwlpZiAoIWJlYWNvbikKKwkJcmV0 dXJuIGZhbHNlOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikoKHU4ICopYmVh Y29uLT5kYXRhKTsKKworCXJlbWFpbl9sZW4gPSBiZWFjb24tPmxlbiAtICgodTggKiltZ210LT51 LmJlYWNvbi52YXJpYWJsZSAtCisJCQkJICAgICh1OCAqKW1nbXQgKyAxMik7CisJcCA9IG1nbXQt PnUuYmVhY29uLnZhcmlhYmxlOworCisJd2hpbGUgKHJlbWFpbl9sZW4gPiAwKSB7CisJCWxlbiA9 ICooKytwKTsKKworCQlpZiAoKnAgPT0gV0xBTl9FSURfVElNKSB7CS8vIHRpbSBmaWVsZAorCQkJ dGltX2VuZCA9IHAgKyBsZW47CisJCQl0aW1fY291bnQgPSAqKCsrcCk7CisJCQlwICs9IDI7CisJ CQkvL211bHRpY2FzdAorCQkJaWYgKCF0aW1fY291bnQpCisJCQkJKnAgfD0gMHgxOworCisJCQlp ZiAoISgqcCAmIDB4ZmUpICYmIHRpbV9lbmQgPj0gcCArIDEpIHsJLy8gd2Ugb25seSBzdXBwb3J0 IDggc3RhIGluIHRoaXMgY2FzZQorCQkJCXArKzsKKwkJCQkqcCA9IGJlYWNvbl90aW1fc2F2ZSgq cCk7CisJCQl9CisKKwkJCXJldHVybiB0aW1fY291bnQgPT0gMDsKKwkJfQorCisJCXAgKz0gbGVu ICsgMTsKKwkJcmVtYWluX2xlbiAtPSAyICsgbGVuOworCX0KKworCXJldHVybiBmYWxzZTsKK30K KwordW5zaWduZWQgbG9uZyBpbml0X2ppZmZpZXM7Cit1bnNpZ25lZCBsb25nIGN5Y2xlX2JlYWNv bl9jb3VudDsKK3N0YXRpYyB2b2lkIGRydl9oYW5kbGVfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0 YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gKHN0cnVjdCBpZWVlODAyMTFfdmlm ICopZGF0YTsKKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ ZHJ2X3ByaXY7CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2ti OworCWJvb2wgdGltX3JlYWNoOworCisJaWYgKCFldmlmLT5lcHViKQorCQlyZXR1cm47CisKKwlt ZGVsYXkoMjQwMCAqIChjeWNsZV9iZWFjb25fY291bnQgJSAyNSkgJSAxMDAwMCAvIDEwMDApOwor CisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZXZpZi0+ZXB1Yi0+aHcsIHZpZik7CisK Kwl0aW1fcmVhY2ggPSBiZWFjb25fdGltX2FsdGVyKGJlYWNvbik7CisKKwlpZiAoYmVhY29uKQor CQlzaXBfdHhfZGF0YV9wa3RfZW5xdWV1ZShldmlmLT5lcHViLCBiZWFjb24pOworCisJaWYgKGN5 Y2xlX2JlYWNvbl9jb3VudCsrID09IDEwMCkgeworCQlpbml0X2ppZmZpZXMgPSBqaWZmaWVzOwor CQljeWNsZV9iZWFjb25fY291bnQgLT0gMTAwOworCX0KKworCW1vZF90aW1lcigmZXZpZi0+YmVh Y29uX3RpbWVyLCBpbml0X2ppZmZpZXMgKworCQkgIG1zZWNzX3RvX2ppZmZpZXMoY3ljbGVfYmVh Y29uX2NvdW50ICoKKwkJCQkgICB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQgKiAxMDI0IC8gMTAw MCkpOworCS8vRklYTUU6dGhlIHBhY2tldHMgbXVzdCBiZSBzZW50IGF0IGhvbWUgY2hhbm5lbAor CS8vc2VuZCBidWZmZXIgbWNhc3QgZnJhbWVzCisJaWYgKHRpbV9yZWFjaCkgeworCQlza2IgPSBp ZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGV2aWYtPmVwdWItPmh3LCB2aWYpOworCQl3aGlsZSAo c2tiKSB7CisJCQlzaXBfdHhfZGF0YV9wa3RfZW5xdWV1ZShldmlmLT5lcHViLCBza2IpOworCQkJ c2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhldmlmLT5lcHViLT5odywgdmlmKTsKKwkJ fQorCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF9iZWFjb25fdGltZXIoc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAq KXZpZi0+ZHJ2X3ByaXY7CisKKwliZWFjb25fdGltX2luaXQoKTsKKwlzZXR1cF90aW1lcigmZXZp Zi0+YmVhY29uX3RpbWVyLCBkcnZfaGFuZGxlX2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpdmlmKTsJ Ly9UQkQsIG5vdCBpbml0IGhlcmUuLi4KKwljeWNsZV9iZWFjb25fY291bnQgPSAxOworCWluaXRf amlmZmllcyA9IGppZmZpZXM7CisJZXZpZi0+YmVhY29uX3RpbWVyLmV4cGlyZXMgPSBpbml0X2pp ZmZpZXMgKworCQltc2Vjc190b19qaWZmaWVzKGN5Y2xlX2JlYWNvbl9jb3VudCAqIHZpZi0+YnNz X2NvbmYuYmVhY29uX2ludCAqCisJCQkJIDEwMjQgLyAxMDAwKTsKKwlhZGRfdGltZXIoJmV2aWYt PmJlYWNvbl90aW1lcik7Cit9CisKKy8qCisgICBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJl cXVlc3RzLiBJRUVFIDgwMi4xMSBjb2RlIGNhbGxzIHRoaXMKKyAgIDI5OTggICogICAgICBmdW5j dGlvbiB0byBjaGFuZ2UgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgZS5nLiwgY2hhbm5lbC4KKyAg IDI5OTkgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBmYWlsIGJ1dCByZXR1cm5z IGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICAgMzAwMCAgKiAgICAgIGlmIGl0IGRvZXMuIFRoZSBj YWxsYmFjayBjYW4gc2xlZXAuCisgICAqLworc3RhdGljIGludCBlc3Bfb3BfY29uZmlnKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1 YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCisJaWYgKGNoYW5nZWQgJiAoSUVFRTgw MjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwgfAorCQkgICAgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdF X0lETEUpKQorCQlzaXBfc2VuZF9jb25maWcoZXB1YiwgJmh3LT5jb25mKTsKKworCXJldHVybiAw OworfQorCisvKgorSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRv IEJTUworMzAwMyAgKiAgICAgIHBhcmFtZXRlcnMgdGhhdCBtYXkgdmFyeSBkdXJpbmcgQlNTJ3Mg bGlmZXNwYW4sIGFuZCBtYXkgYWZmZWN0IGxvdworMzAwNCAgKiAgICAgIGxldmVsIGRyaXZlciAo ZS5nLiBhc3NvYy9kaXNhc3NvYyBzdGF0dXMsIGVycCBwYXJhbWV0ZXJzKS4KKzMwMDUgICogICAg ICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBpZiBubyBCU1MgaGFzIGJlZW4gc2V0 LCB1bmxlc3MKKzMwMDYgICogICAgICBmb3IgYXNzb2NpYXRpb24gaW5kaWNhdGlvbi4gVGhlIEBj aGFuZ2VkIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2gKKzMwMDcgICogICAgICBvZiB0aGUgYnNz IHBhcmFtZXRlcnMgaGFzIGNoYW5nZWQgd2hlbiBhIGNhbGwgaXMgbWFkZS4gVGhlIGNhbGxiYWNr CiszMDA4ICAqICAgICAgY2FuIHNsZWVwLgorICAgKi8KK3N0YXRpYyB2b2lkIGVzcF9vcF9ic3Nf aW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZv LAorCQkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1 Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCXN0cnVjdCBlc3BfdmlmICpldmlmID0gKHN0cnVjdCBl c3BfdmlmICopdmlmLT5kcnZfcHJpdjsKKwl1OCAqYnNzaWQgPSAodTggKilpbmZvLT5ic3NpZDsK Kwlib29sIGFzc29jID0gaW5mby0+YXNzb2M7CisKKwkvLyBpZWVlODAyMTFfYnNzX2NvbmYoaW5j bHVkZS9uZXQvbWFjODAyMTEuaCkgaXMgaW5jbHVkZWQgaW4gaWVlZTgwMjExX3N1Yl9pZl9kYXRh KG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oKSAsIGRvZXMgYnNzaWQ9aWVlZTgwMjExX2lmX2Fw J3Mgc3NpZCA/CisKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsK KwkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCB8fAorCQkgICAgKChjaGFuZ2VkICYg QlNTX0NIQU5HRURfQVNTT0MpICYmIGFzc29jKSkgeworCQkJZXZpZi0+YmVhY29uX2ludGVydmFs ID0gaW5mby0+YWlkOworCQkJbWVtY3B5KGVwdWItPndsLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4p OworCQkJc2lwX3NlbmRfYnNzX2luZm9fdXBkYXRlKGVwdWIsIGV2aWYsIGJzc2lkLCBhc3NvYyk7 CisJCX0gZWxzZSBpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgJiYgIWFzc29jKSB7 CisJCQlldmlmLT5iZWFjb25faW50ZXJ2YWwgPSAwOworCQkJbWVtc2V0KGVwdWItPndsLmJzc2lk LCAwLCBFVEhfQUxFTik7CisJCQlzaXBfc2VuZF9ic3NfaW5mb191cGRhdGUoZXB1YiwgZXZpZiwg YnNzaWQsIGFzc29jKTsKKwkJfQorCX0gZWxzZSBpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZU WVBFX0FQKSB7CisJCWlmICghKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkg JiYKKwkJICAgICEoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpKQorCQkJcmV0dXJu OworCisJCWlmIChpbmZvLT5lbmFibGVfYmVhY29uICYmICFldmlmLT5hcF91cCkgeworCQkJZXZp Zi0+YmVhY29uX2ludGVydmFsID0gaW5mby0+YmVhY29uX2ludDsKKwkJCWluaXRfYmVhY29uX3Rp bWVyKHZpZik7CisJCQlzaXBfc2VuZF9ic3NfaW5mb191cGRhdGUoZXB1YiwgZXZpZiwgYnNzaWQs IDIpOworCQkJZXZpZi0+YXBfdXAgPSB0cnVlOworCQl9IGVsc2UgaWYgKCFpbmZvLT5lbmFibGVf YmVhY29uICYmIGV2aWYtPmFwX3VwICYmCisJCQkgICAhKGh3LT5jb25mLmZsYWdzICYgSUVFRTgw MjExX0NPTkZfT0ZGQ0hBTk5FTCkpIHsKKwkJCWV2aWYtPmJlYWNvbl9pbnRlcnZhbCA9IDA7CisJ CQlkZWxfdGltZXJfc3luYygmZXZpZi0+YmVhY29uX3RpbWVyKTsKKwkJCXNpcF9zZW5kX2Jzc19p bmZvX3VwZGF0ZShlcHViLCBldmlmLCBic3NpZCwgMik7CisJCQlldmlmLT5hcF91cCA9IGZhbHNl OworCQl9CisJfQorfQorCisvKgorICAgQ29uZmlndXJlIHRoZSBkZXZpY2UncyBSWCBmaWx0ZXIu CisgICAzMDE1ICAqICAgICAgU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBt b3JlIGluZm9ybWF0aW9uLgorICAgMzAxNiAgKiAgICAgIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBp bXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgorICovCitzdGF0aWMgdm9pZCBlc3Bfb3BfY29uZmln dXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgdW5zaWduZWQgaW50 IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIHU2NCBt dWx0aWNhc3QpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilo dy0+cHJpdjsKKworCWVwdWItPnJ4X2ZpbHRlciA9IDA7CisKKwlpZiAoKnRvdGFsX2ZsYWdzICYg RklGX0FMTE1VTFRJKQorCQllcHViLT5yeF9maWx0ZXIgfD0gRklGX0FMTE1VTFRJOworCisJKnRv dGFsX2ZsYWdzID0gZXB1Yi0+cnhfZmlsdGVyOworfQorCitzdGF0aWMgYm9vbCBpc19jaXBoZXJf c3VpdGVfd2VwKHUzMiBjaXBoZXIpCit7CisJcmV0dXJuIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJf U1VJVEVfV0VQNDApIHx8CisJCShjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KTsK K30KKworLyoKKyAgIFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlv biIKKyAgIDMwMjkgICogICAgICBUaGlzIGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4g YWRkX2ludGVyZmFjZSBhbmQKKyAgIDMwMzAgICogICAgICByZW1vdmVfaW50ZXJmYWNlIGNhbGxz LCBpLmUuIHdoaWxlIHRoZSBnaXZlbiB2aXJ0dWFsIGludGVyZmFjZQorICAgMzAzMSAgKiAgICAg IGlzIGVuYWJsZWQuCisgICAzMDMyICAqICAgICAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUgaWYgdGhlIGtleSBjYW4ndCBiZSBhZGRlZC4KKyAgIDMwMzMgICogICAgICBUaGUgY2FsbGJh Y2sgY2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IGVzcF9vcF9zZXRfa2V5KHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJCSAgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IGllZWU4 MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBl c3BfcHViICopaHctPnByaXY7CisJc3RydWN0IGVzcF92aWYgKmV2aWYgPSAoc3RydWN0IGVzcF92 aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBlc3BfaHdfaWR4X21hcCAqbWFwOworCWF0b21p Y190ICpjbnQxLCAqY250MjsKKwl1OCBpLCBpZmlkeCA9IGV2aWYtPmluZGV4LCBpc3ZhbGlkLCBp bmRleDsKKwl1OCAqcGVlcl9hZGRyOworCWludCByZXQsIGNvdW50ZXI7CisKKwlrZXktPmZsYWdz IHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKworCWlmIChzdGEgJiYgbWVtY21w KHN0YS0+YWRkciwgZXB1Yi0+d2wuYnNzaWQsIEVUSF9BTEVOKSkKKwkJcGVlcl9hZGRyID0gc3Rh LT5hZGRyOworCWVsc2UKKwkJcGVlcl9hZGRyID0gZXB1Yi0+d2wuYnNzaWQ7CisKKwlpc3ZhbGlk ID0gISEoY21kID09IFNFVF9LRVkpOworCisJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZ X0ZMQUdfUEFJUldJU0UgfHwKKwkgICAgaXNfY2lwaGVyX3N1aXRlX3dlcChrZXktPmNpcGhlcikp CisJCW1hcCA9IGVwdWItPmxvd19tYXBbaWZpZHhdOworCWVsc2UKKwkJbWFwID0gZXB1Yi0+aGlf bWFwOworCisJaWYgKGlzdmFsaWQpIHsKKwkJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZ X0ZMQUdfUEFJUldJU0UgfHwKKwkJICAgIGlzX2NpcGhlcl9zdWl0ZV93ZXAoa2V5LT5jaXBoZXIp KQorCQkJY291bnRlciA9IDI7CisJCWVsc2UKKwkJCWNvdW50ZXIgPSAxOTsKKworCQlmb3IgKGkg PSAwOyBpIDwgY291bnRlcjsgaSsrKSB7CisJCQlpZiAobWFwW2ldLmZsYWcpCisJCQkJY29udGlu dWU7CisKKwkJCW1hcFtpXS5mbGFnID0gMTsKKwkJCW1lbWNweShtYXBbaV0ubWFjLCBwZWVyX2Fk ZHIsIEVUSF9BTEVOKTsKKwkJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BB SVJXSVNFIHx8CisJCQkgICAgaXNfY2lwaGVyX3N1aXRlX3dlcChrZXktPmNpcGhlcikpCisJCQkJ a2V5LT5od19rZXlfaWR4ID0gaSArIDY7CisJCQllbHNlCisJCQkJa2V5LT5od19rZXlfaWR4ID0g aSArIGlmaWR4ICogMiArIDI7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW1hcFtpbmRl eF0uZmxhZyA9IDA7CisJCW1lbXNldChtYXBbaW5kZXhdLm1hYywgMCwgRVRIX0FMRU4pOworCisJ CWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFIHx8CisJCSAgICBp c19jaXBoZXJfc3VpdGVfd2VwKGtleS0+Y2lwaGVyKSkKKwkJCWluZGV4ID0ga2V5LT5od19rZXlf aWR4IC0gNjsKKwkJZWxzZQorCQkJaW5kZXggPSBrZXktPmh3X2tleV9pZHggLSAyIC0gaWZpZHgg KiAyOworCX0KKworCWlmIChrZXktPmh3X2tleV9pZHggPj0gNikgeworCQljbnQxID0gJmVwdWIt PndsLnB0a19jbnQ7CisJCWNudDIgPSAmZXB1Yi0+d2wuZ3RrX2NudDsKKwl9IGVsc2UgeworCQlj bnQyID0gJmVwdWItPndsLnB0a19jbnQ7CisJCWNudDEgPSAmZXB1Yi0+d2wuZ3RrX2NudDsKKwl9 CisKKwkvKnNlbmQgc3ViX3NjYW4gdGFzayB0byB0YXJnZXQgKi8KKwlpZiAoaXN2YWxpZCkKKwkJ YXRvbWljX2luYyhjbnQxKTsKKwllbHNlCisJCWF0b21pY19kZWMoY250MSk7CisKKwlpZiAoaXNf Y2lwaGVyX3N1aXRlX3dlcChrZXktPmNpcGhlcikpIHsKKwkJaWYgKGlzdmFsaWQpCisJCQlhdG9t aWNfaW5jKGNudDIpOworCQllbHNlCisJCQlhdG9taWNfZGVjKGNudDIpOworCX0KKworCXJldCA9 IHNpcF9zZW5kX3NldGtleShlcHViLCBpZmlkeCwgcGVlcl9hZGRyLCBrZXksIGlzdmFsaWQpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBI RVJfU1VJVEVfVEtJUCAmJiAhcmV0KQorCQlhdG9taWNfc2V0KCZlcHViLT53bC50a2lwX2tleV9z ZXQsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaHdfc2Nhbl9kb25lKHN0cnVjdCBlc3Bf cHViICplcHViLCBib29sIGFib3J0ZWQpCit7CisJc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBp bmZvID0geworCQkuYWJvcnRlZCA9IGFib3J0ZWQsCisJfTsKKworCWNhbmNlbF9kZWxheWVkX3dv cmtfc3luYygmZXB1Yi0+c2Nhbl90aW1lb3V0X3dvcmspOworCisJRVNTRVJUKGVwdWItPndsLnNj YW5fcmVxKTsKKworCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChlcHViLT5odywgJmluZm8pOwor CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFU1BfV0xfRkxBR19TVE9QX1RYUSwgJmVwdWItPnds LmZsYWdzKSkKKwkJc2lwX3RyaWdnZXJfdHhxX3Byb2Nlc3MoZXB1Yi0+c2lwKTsKK30KKworc3Rh dGljIHZvaWQgaHdfc2Nhbl90aW1lb3V0X3JlcG9ydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVz cF9wdWIsCisJCQkJCSAgICBzY2FuX3RpbWVvdXRfd29yay53b3JrKTsKKwlib29sIGFib3J0ZWQ7 CisJc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvID0ge307CisKKwlpZiAodGVzdF9hbmRf Y2xlYXJfYml0KEVTUF9XTF9GTEFHX1NUT1BfVFhRLCAmZXB1Yi0+d2wuZmxhZ3MpKQorCQlzaXBf dHJpZ2dlcl90eHFfcHJvY2VzcyhlcHViLT5zaXApOworCS8qY2hlY2sgaWYgbm9ybWFsbHkgY29t cGxldGUgb3IgYWJvcnRlZCBsaWtlIHRpbWVvdXQvaHcgZXJyb3IgKi8KKwlhYm9ydGVkID0gKGVw dWItPndsLnNjYW5fcmVxICE9IDApOworCisJaWYgKGFib3J0ZWQpCisJCWVwdWItPndsLnNjYW5f cmVxID0gTlVMTDsKKworCWluZm8uYWJvcnRlZCA9IGFib3J0ZWQ7CisKKwlpZWVlODAyMTFfc2Nh bl9jb21wbGV0ZWQoZXB1Yi0+aHcsICZpbmZvKTsKK30KKworLyoKKyAgIENvbmZpZ3VyYXRpb24g b2YgUlRTIHRocmVzaG9sZCAoaWYgZGV2aWNlIG5lZWRzIGl0KQorICAgMzEwNiAgKiAgICAgIFRo ZSBjYWxsYmFjayBjYW4gc2xlZXAuCisgICAqLworc3RhdGljIGludCBlc3Bfb3Bfc2V0X3J0c190 aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBlc3Bfbm9kZV9hdHRhY2goc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHU4IGlmaWR4LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1 Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCXN0cnVjdCBl c3Bfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZXNwX3R4X3RpZCAqdGlkOworCXU4IHRpZG5vID0gMDsK KwlpbnQgaTsKKworCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisKKwkvKiBm ZnooeCkgbmVlZHMgYXQgbGVhc3Qgb25lIHplcm8gb3IgcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVo YXZpb3VyLiAqLworCWlmICgofmVwdWItPmVub2Rlc19tYXApID09IDApCisJCXJldHVybiAtRUlO VkFMOworCisJaSA9IGZmeihlcHViLT5lbm9kZXNfbWFwKTsKKworCWlmIChod2VpZ2h0MzIoZXB1 Yi0+ZW5vZGVzX21hcHNbaWZpZHhdKSA+PSBFU1BfUFVCX01BWF9TVEEgfHwKKwkgICAgaSA+IEVT UF9QVUJfTUFYX1NUQSkgeworCQlpID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWVwdWItPmVu b2Rlc19tYXAgfD0gQklUKGkpOworCWVwdWItPmVub2Rlc19tYXBzW2lmaWR4XSB8PSBCSVQoaSk7 CisJbm9kZSA9IChzdHJ1Y3QgZXNwX25vZGUgKilzdGEtPmRydl9wcml2OworCWVwdWItPmVub2Rl c1tpXSA9IG5vZGU7CisJbm9kZS0+c3RhID0gc3RhOworCW5vZGUtPmlmaWR4ID0gaWZpZHg7CisJ bm9kZS0+aW5kZXggPSBpOworCisJd2hpbGUgKHRpZG5vIDwgV01FX05VTV9USUQpIHsKKwkJdGlk ID0gJm5vZGUtPnRpZFt0aWRub107CisJCXRpZC0+c3NuID0gMDsKKwkJdGlkLT5jbnQgPSAwOwor CQl0aWQtPnN0YXRlID0gRVNQX1RJRF9TVEFURV9JTklUOworCQl0aWRubysrOworCX0KKworb3V0 OgorCXNwaW5fdW5sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKKworCXJldHVybiBpOwor fQorCitzdGF0aWMgaW50IGVzcF9ub2RlX2RldGFjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg dTggaWZpZHgsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBl c3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7CisJdTMyIG1hcDsKKwlp bnQgaTsKKworCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisKKwltYXAgPSBl cHViLT5lbm9kZXNfbWFwc1tpZmlkeF07CisKKwl3aGlsZSAobWFwKSB7CisJCWkgPSBmZnMobWFw KSAtIDE7CisJCWlmIChlcHViLT5lbm9kZXNbaV0tPnN0YSA9PSBzdGEpIHsKKwkJCWVwdWItPmVu b2Rlc1tpXS0+c3RhID0gTlVMTDsKKwkJCWVwdWItPmVub2Rlc1tpXSA9IE5VTEw7CisJCQllcHVi LT5lbm9kZXNfbWFwICY9IH5CSVQoaSk7CisJCQllcHViLT5lbm9kZXNfbWFwc1tpZmlkeF0gJj0g fkJJVChpKTsKKworCQkJZ290byBvdXQ7CisJCX0KKworCQltYXAgJj0gfkJJVChpKTsKKwl9CisK KwlpID0gLTE7CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7 CisKKwlyZXR1cm4gaTsKK30KKworc3RydWN0IGVzcF9ub2RlICplc3BfZ2V0X25vZGVfYnlfYWRk cihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IGVzcF9u b2RlICpub2RlID0gTlVMTDsKKwlpbnQgaTsKKwl1MzIgbWFwOworCisJaWYgKCFhZGRyKQorCQly ZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisJbWFw ID0gZXB1Yi0+ZW5vZGVzX21hcDsKKworCXdoaWxlIChtYXApIHsKKwkJaSA9IGZmcyhtYXApIC0g MTsKKworCQlpZiAoIW1lbWNtcChlcHViLT5lbm9kZXNbaV0tPnN0YS0+YWRkciwgYWRkciwgRVRI X0FMRU4pKSB7CisJCQlub2RlID0gZXB1Yi0+ZW5vZGVzW2ldOworCQkJZ290byBvdXQ7CisJCX0K KworCQltYXAgJj0gfkJJVChpKTsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmZXB1Yi0+ dHhfYW1wZHVfbG9jayk7CisKKwlyZXR1cm4gbm9kZTsKK30KKworaW50IGVzcF9nZXRfZW1wdHlf cnhhbXBkdShzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgY29uc3QgdTggKmFkZHIsIHU4IHRpZCkKK3sK KwlpbnQgaW5kZXg7CisKKwlpZiAoIWFkZHIpCisJCXJldHVybiAtMTsKKworCXNwaW5fbG9ja19i aCgmZXB1Yi0+cnhfYW1wZHVfbG9jayk7CisKKwlpbmRleCA9IGZmeihlcHViLT5yeGFtcGR1X21h cCk7CisKKwlpZiAoaW5kZXggPj0gRVNQX1BVQl9NQVhfUlhBTVBEVSkgeworCQlpbmRleCA9IC0x OworCQlnb3RvIG91dDsKKwl9CisKKwllcHViLT5yeGFtcGR1X21hcCB8PSBCSVQoaW5kZXgpOwor CWVwdWItPnJ4YW1wZHVfbm9kZVtpbmRleF0gPSBlc3BfZ2V0X25vZGVfYnlfYWRkcihlcHViLCBh ZGRyKTsKKwllcHViLT5yeGFtcGR1X3RpZFtpbmRleF0gPSB0aWQ7CisKK291dDoKKwlzcGluX3Vu bG9ja19iaCgmZXB1Yi0+cnhfYW1wZHVfbG9jayk7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK2lu dCBlc3BfZ2V0X2V4aXN0X3J4YW1wZHUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIGNvbnN0IHU4ICph ZGRyLCB1OCB0aWQpCit7CisJdTggbWFwOworCWludCBpbmRleDsKKworCWlmICghYWRkcikKKwkJ cmV0dXJuIC0xOworCisJc3Bpbl9sb2NrX2JoKCZlcHViLT5yeF9hbXBkdV9sb2NrKTsKKwltYXAg PSBlcHViLT5yeGFtcGR1X21hcDsKKworCXdoaWxlIChtYXApIHsKKwkJaW5kZXggPSBmZnMobWFw KSAtIDE7CisKKwkJaWYgKGVwdWItPnJ4YW1wZHVfdGlkW2luZGV4XSA9PSB0aWQgJiYKKwkJICAg ICFtZW1jbXAoZXB1Yi0+cnhhbXBkdV9ub2RlW2luZGV4XS0+c3RhLT5hZGRyLCBhZGRyLAorCQkJ ICAgIEVUSF9BTEVOKSkgeworCQkJZXB1Yi0+cnhhbXBkdV9tYXAgJj0gfkJJVChpbmRleCk7CisJ CQlnb3RvIG91dDsKKwkJfQorCisJCW1hcCAmPSB+QklUKGluZGV4KTsKKwl9CisKKwlpbmRleCA9 IC0xOworCitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJmVwdWItPnJ4X2FtcGR1X2xvY2spOworCXJl dHVybiBpbmRleDsKK30KKworLyoKKyAgIE5vdGlmaWVzIGxvdyBsZXZlbCBkcml2ZXIgYWJvdXQg YWRkaXRpb24gb2YgYW4gYXNzb2NpYXRlZCBzdGF0aW9uLAorICAgMzEwOSAgKiAgICAgIEFQLCBJ QlNTL1dEUy9tZXNoIHBlZXIgZXRjLiBUaGlzIGNhbGxiYWNrIGNhbiBzbGVlcC4KKyAgICovCitz dGF0aWMgaW50IGVzcF9vcF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQorewor CXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7CisJc3Ry dWN0IGVzcF92aWYgKmV2aWYgPSAoc3RydWN0IGVzcF92aWYgKil2aWYtPmRydl9wcml2OworCWlu dCBpbmRleDsKKworCWluZGV4ID0gZXNwX25vZGVfYXR0YWNoKGh3LCBldmlmLT5pbmRleCwgc3Rh KTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gaW5kZXg7CisKKwlzaXBfc2VuZF9zZXRfc3Rh KGVwdWIsIGV2aWYtPmluZGV4LCAxLCBzdGEsIHZpZiwgKHU4KWluZGV4KTsKKworCXJldHVybiAw OworfQorCisvKgorIE5vdGlmaWVzIGxvdyBsZXZlbCBkcml2ZXIgYWJvdXQgcmVtb3ZhbCBvZiBh biBhc3NvY2lhdGVkCisgMzExMiAgKiAgICAgIHN0YXRpb24sIEFQLCBJQlNTL1dEUy9tZXNoIHBl ZXIgZXRjLiBOb3RlIHRoYXQgYWZ0ZXIgdGhlIGNhbGxiYWNrCisgMzExMyAgKiAgICAgIHJldHVy bnMgaXQgaXNuJ3Qgc2FmZSB0byB1c2UgdGhlIHBvaW50ZXIsIG5vdCBldmVuIFJDVSBwcm90ZWN0 ZWQ7CisgMzExNCAgKiAgICAgIG5vIFJDVSBncmFjZSBwZXJpb2QgaXMgZ3VhcmFudGVlZCBiZXR3 ZWVuIHJldHVybmluZyBoZXJlIGFuZCBmcmVlaW5nCisgMzExNSAgKiAgICAgIHRoZSBzdGF0aW9u LiBTZWUgQHN0YV9wcmVfcmN1X3JlbW92ZSBpZiBuZWVkZWQuCisgMzExNiAgKiAgICAgIFRoaXMg Y2FsbGJhY2sgY2FuIHNsZWVwCisgKi8KK3N0YXRpYyBpbnQgZXNwX29wX3N0YV9yZW1vdmUoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAg IHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAo c3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZiA9IChzdHJ1 Y3QgZXNwX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IGluZGV4OworCisJLy9yZW1vdmUgYSBj b25uZWN0IGluIHRhcmdldAorCWluZGV4ID0gZXNwX25vZGVfZGV0YWNoKGh3LCBldmlmLT5pbmRl eCwgc3RhKTsKKwlzaXBfc2VuZF9zZXRfc3RhKGVwdWIsIGV2aWYtPmluZGV4LCAwLCBzdGEsIHZp ZiwgKHU4KWluZGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorIE5vdGlmaWVzIGxvdyBsZXZl bCBkcml2ZXIgYWJvdXQgcG93ZXIgc3RhdGUgdHJhbnNpdGlvbiBvZiBhbgorIDMxMjQgICogICAg ICBhc3NvY2lhdGVkIHN0YXRpb24sIEFQLCAgSUJTUy9XRFMvbWVzaCBwZWVyIGV0Yy4gRm9yIGEg VklGIG9wZXJhdGluZworIDMxMjUgICogICAgICBpbiBBUCBtb2RlLCB0aGlzIGNhbGxiYWNrIHdp bGwgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBmbGFnCisgMzEyNiAgKiAgICAgICVJRUVFODAyMTFf SFdfQVBfTElOS19QUyBpcyBzZXQuIE11c3QgYmUgYXRvbWljLgorICovCitzdGF0aWMgdm9pZCBl c3Bfb3Bfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwK KwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7Cit9CisKKy8qCisgQ29uZmln dXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3dfbWF4KSwKKyAz MTY1ICAqICAgICAgYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLgorIDMxNjYgICog ICAgICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorIDMxNjcgICog ICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IGVzcF9vcF9jb25m X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAor CQkJICB1MTYgcXVldWUsCisJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFy YW1zICpwYXJhbXMpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIg Kilody0+cHJpdjsKKworCXJldHVybiBzaXBfc2VuZF93bW1fcGFyYW1zKGVwdWIsIHF1ZXVlLCBw YXJhbXMpOworfQorCisvKgorIEdldCB0aGUgY3VycmVudCBUU0YgdGltZXIgdmFsdWUgZnJvbSBm aXJtd2FyZS9oYXJkd2FyZS4gQ3VycmVudGx5LAorIDMxNzAgICogICAgICB0aGlzIGlzIG9ubHkg dXNlZCBmb3IgSUJTUyBtb2RlIEJTU0lEIG1lcmdpbmcgYW5kIGRlYnVnZ2luZy4gSXMgbm90IGEK KyAzMTcxICAqICAgICAgcmVxdWlyZWQgZnVuY3Rpb24uCisgMzE3MiAgKiAgICAgIFRoZSBjYWxs YmFjayBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyB1NjQgZXNwX29wX2dldF90c2Yoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJcmV0dXJuIDA7 Cit9CisKKy8qCisgU2V0IHRoZSBUU0YgdGltZXIgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0 aGUgZmlybXdhcmUvaGFyZHdhcmUuCisgMzE3NSAgKiAgICAgIEN1cnJlbnRseSwgdGhpcyBpcyBv bmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcuIElzIG5vdCBhCisgMzE3NiAgKiAgICAg IHJlcXVpcmVkIGZ1bmN0aW9uLgorIDMxNzcgICogICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVw LgorICovCitzdGF0aWMgdm9pZCBlc3Bfb3Bfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgIHU2NCB0c2YpCit7Cit9CisKKy8q CisgUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3lu Y2hyb25pemUKKyAzMTg2ICAqICAgICAgd2l0aCBvdGhlciBTVEFzIGluIHRoZSBJQlNTLiBUaGlz IGlzIG9ubHkgdXNlZCBpbiBJQlNTIG1vZGUuIFRoaXMKKyAzMTg3ICAqICAgICAgZnVuY3Rpb24g aXMgb3B0aW9uYWwgaWYgdGhlIGZpcm13YXJlL2hhcmR3YXJlIHRha2VzIGZ1bGwgY2FyZSBvZgor IDMxODggICogICAgICBUU0Ygc3luY2hyb25pemF0aW9uLgorIDMxODkgICogICAgICBUaGUgY2Fs bGJhY2sgY2FuIHNsZWVwLgorICovCitzdGF0aWMgdm9pZCBlc3Bfb3BfcmVzZXRfdHNmKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworfQorCisv KgorIFBvbGwgcmZraWxsIGhhcmR3YXJlIHN0YXRlLiBJZiB5b3UgbmVlZCB0aGlzLCB5b3UgYWxz bworIDMyMjAgICogICAgICBuZWVkIHRvIHNldCB3aXBoeS0+cmZraWxsX3BvbGwgdG8gJXRydWUg YmVmb3JlIHJlZ2lzdHJhdGlvbiwKKyAzMjIxICAqICAgICAgYW5kIG5lZWQgdG8gY2FsbCB3aXBo eV9yZmtpbGxfc2V0X2h3X3N0YXRlKCkgaW4gdGhlIGNhbGxiYWNrLgorIDMyMjIgICogICAgICBU aGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICovCitzdGF0aWMgdm9pZCBlc3Bfb3BfcmZraWxsX3Bv bGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAo c3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKKworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUo aHctPndpcGh5LCB0ZXN0X2JpdChFU1BfV0xfRkxBR19SRktJTEwsCisJCQkJCQkgICAgICAmZXB1 Yi0+d2wuZmxhZ3MpKTsKK30KKworI2lmZGVmIEhXX1NDQU4KKy8qCisgQXNrIHRoZSBoYXJkd2Fy ZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5lZWQgdG8gc3RhcnQKKyAzMDUxICAq ICAgICAgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBpbiBzdGFjay4gVGhlIHNjYW4gbXVzdCBob25v dXIgdGhlIGNoYW5uZWwKKyAzMDUyICAqICAgICAgY29uZmlndXJhdGlvbiBkb25lIGJ5IHRoZSBy ZWd1bGF0b3J5IGFnZW50IGluIHRoZSB3aXBoeSdzCisgMzA1MyAgKiAgICAgIHJlZ2lzdGVyZWQg YmFuZHMuIFRoZSBoYXJkd2FyZSAob3IgdGhlIGRyaXZlcikgbmVlZHMgdG8gbWFrZSBzdXJlCisg MzA1NCAgKiAgICAgIHRoYXQgcG93ZXIgc2F2ZSBpcyBkaXNhYmxlZC4KKyAzMDU1ICAqICAgICAg VGhlIEByZXEgaWUvaWVfbGVuIG1lbWJlcnMgYXJlIHJld3JpdHRlbiBieSBtYWM4MDIxMSB0byBj b250YWluIHRoZQorIDMwNTYgICogICAgICBlbnRpcmUgSUVzIGFmdGVyIHRoZSBTU0lELCBzbyB0 aGF0IGRyaXZlcnMgbmVlZCBub3QgbG9vayBhdCB0aGVzZQorIDMwNTcgICogICAgICBhdCBhbGwg YnV0IGp1c3Qgc2VuZCB0aGVtIGFmdGVyIHRoZSBTU0lEIC0tIG1hYzgwMjExIGluY2x1ZGVzIHRo ZQorIDMwNTggICogICAgICAoZXh0ZW5kZWQpIHN1cHBvcnRlZCByYXRlcyBhbmQgSFQgaW5mb3Jt YXRpb24gKHdoZXJlIGFwcGxpY2FibGUpLgorIDMwNTkgICogICAgICBXaGVuIHRoZSBzY2FuIGZp bmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlIGNhbGxlZDsKKyAzMDYw ICAqICAgICAgbm90ZSB0aGF0IGl0IGFsc28gbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgc2NhbiBj YW5ub3QgZmluaXNoIGR1ZSB0bworIDMwNjEgICogICAgICBhbnkgZXJyb3IgdW5sZXNzIHRoaXMg Y2FsbGJhY2sgcmV0dXJuZWQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorIDMwNjIgICogICAgICBU aGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IGVzcF9vcF9od19zY2FuKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBz dHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGVzcF9wdWIgKmVw dWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAq c3NpZDIgPSByZXEtPnNzaWRzICsgMTsKKwlpbnQgaSwgcmV0OworCWJvb2wgc2Nhbl9vZnRlbjsK KworCS8qIHNjYW5fcmVxdWVzdCBpcyBrZWVwIGFsbG9jYXRlIHVudGlsIHNjYW5fZG9uZSxyZWNv cmQgaXQKKwkgKiB0byBzcGxpdCByZXF1ZXN0IGludG8gbXVsdGkgc2Rpb19jbWQKKwkgKi8KKwlp ZiAoYXRvbWljX3JlYWQoJmVwdWItPndsLm9mZikpIHsKKwkJZGV2X2VycihlcHViLT5kZXYsICJo d19zY2FuIGJ1dCB3bCBvZmZcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChyZXEt Pm5fc3NpZHMgPiAxKQorCQlpZiAoKHJlcS0+c3NpZHMtPnNzaWRfbGVuID4gMCAmJiBzc2lkMi0+ c3NpZF9sZW4gPiAwKSB8fAorCQkgICAgcmVxLT5uX3NzaWRzID4gMikgeworCQkJZGV2X2Vycihl cHViLT5kZXYsICJjYW5ub3Qgc2NhbiB0d28gU1NJRHNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKworCWVwdWItPndsLnNjYW5fcmVxID0gcmVxOworCisJLyppbiBjb25uZWN0IHN0YXRl LCBzdXNwZW5kIHR4IGRhdGEgKi8KKwlpZiAoZXB1Yi0+c2lwLT5zdXBwb3J0X2Jnc2NhbiAmJgor CSAgICB0ZXN0X2JpdChFU1BfV0xfRkxBR19DT05ORUNULCAmZXB1Yi0+d2wuZmxhZ3MpICYmIHJl cS0+bl9jaGFubmVscykgeworCQlzY2FuX29mdGVuID0gZXB1Yi0+c2Nhbl9wZXJtaXRfdmFsaWQg JiYKKwkJCXRpbWVfYmVmb3JlKGppZmZpZXMsIGVwdWItPnNjYW5fcGVybWl0KTsKKwkJZXB1Yi0+ c2Nhbl9wZXJtaXRfdmFsaWQgPSB0cnVlOworCisJCWlmICghc2Nhbl9vZnRlbikgeworCQkJLyog ZXB1Yi0+c2Nhbl9wZXJtaXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg5MDApOworCQkJ ICogIHNldF9iaXQoRVNQX1dMX0ZMQUdfU1RPUF9UWFEsICZlcHViLT53bC5mbGFncyk7CisJCQkg KiAgaWYgKGF0b21pY19yZWFkKCZlcHViLT50eHFfc3RvcHBlZCkgPT0gZmFsc2UpIHsKKwkJCSAq ICBhdG9taWNfc2V0KCZlcHViLT50eHFfc3RvcHBlZCwgdHJ1ZSk7CisJCQkgKiAgaWVlZTgwMjEx X3N0b3BfcXVldWVzKGh3KTsKKwkJCSAqICB9CisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCWRldl9l cnIoZXB1Yi0+ZGV2LCAic2NhbiB0b28gb2Z0ZW5cbiIpOworCQkJcmV0dXJuIC1FQUNDRVM7CisJ CX0KKwl9IGVsc2UgeworCQlzY2FuX29mdGVuID0gZmFsc2U7CisJfQorCisJLypzZW5kIHN1Yl9z Y2FuIHRhc2sgdG8gdGFyZ2V0ICovCisJcmV0ID0gc2lwX3NlbmRfc2NhbihlcHViKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoZXB1Yi0+ZGV2LCAiZmFpbGVkIHRvIHNlbmQgc2Nhbl9jbWQ6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChzY2FuX29mdGVuKQorCQlyZXR1 cm4gMDsKKworCWVwdWItPnNjYW5fcGVybWl0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMo OTAwKTsKKwlzZXRfYml0KEVTUF9XTF9GTEFHX1NUT1BfVFhRLCAmZXB1Yi0+d2wuZmxhZ3MpOwor CWlmICghYXRvbWljX3JlYWQoJmVwdWItPnR4cV9zdG9wcGVkKSkgeworCQlhdG9taWNfc2V0KCZl cHViLT50eHFfc3RvcHBlZCwgdHJ1ZSk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisJ fQorCisJLypmb3JjZSBzY2FuIGNvbXBsZXRlIGluIGNhc2UgdGFyZ2V0IGZhaWwgdG8gcmVwb3J0 IGluIHRpbWUgKi8KKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmZXB1Yi0+c2Nh bl90aW1lb3V0X3dvcmssCisJCQkJICAgICByZXEtPm5fY2hhbm5lbHMgKiBIWiAvIDQpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qCisgU3RhcnRzIGFuIG9mZi1jaGFubmVsIHBlcmlvZCBvbiB0aGUg Z2l2ZW4gY2hhbm5lbCwgbXVzdAorIDMyNTUgICogICAgICBjYWxsIGJhY2sgdG8gaWVlZTgwMjEx X3JlYWR5X29uX2NoYW5uZWwoKSB3aGVuIG9uIHRoYXQgY2hhbm5lbC4gTm90ZQorIDMyNTYgICog ICAgICB0aGF0IG5vcm1hbCBjaGFubmVsIHRyYWZmaWMgaXMgbm90IHN0b3BwZWQgYXMgdGhpcyBp cyBpbnRlbmRlZCBmb3IgaHcKKyAzMjU3ICAqICAgICAgb2ZmbG9hZC4gRnJhbWVzIHRvIHRyYW5z bWl0IG9uIHRoZSBvZmYtY2hhbm5lbCBjaGFubmVsIGFyZSB0cmFuc21pdHRlZAorIDMyNTggICog ICAgICBub3JtYWxseSBleGNlcHQgZm9yIHRoZSAlSUVFRTgwMjExX1RYX0NUTF9UWF9PRkZDSEFO IGZsYWcuIFdoZW4gdGhlCisgMzI1OSAgKiAgICAgIGR1cmF0aW9uICh3aGljaCB3aWxsIGFsd2F5 cyBiZSBub24temVybykgZXhwaXJlcywgdGhlIGRyaXZlciBtdXN0IGNhbGwKKyAzMjYwICAqICAg ICAgaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQoKS4KKyAzMjYxICAqICAgICAg Tm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCB3aGlsZSB0aGUgZGV2aWNlIGlz IGluIElETEUgYW5kCisgMzI2MiAgKiAgICAgIG11c3QgYmUgYWNjZXB0ZWQgaW4gdGhpcyBjYXNl LgorIDMyNjMgICogICAgICBUaGlzIGNhbGxiYWNrIG1heSBzbGVlcC4KKyAqLworc3RhdGljIGlu dCBlc3Bfb3BfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJ ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgZW51bSBubDgwMjEx X2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgIGludCBkdXJhdGlvbikKK3sKKwlz dHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2OworCisJc2lw X3NlbmRfcm9jKGVwdWIsIGNoYW4tPmNlbnRlcl9mcmVxLCBkdXJhdGlvbik7CisKKwlyZXR1cm4g MDsKK30KKworLyoKKyAzMjY0ICAqIEBjYW5jZWxfcmVtYWluX29uX2NoYW5uZWw6IFJlcXVlc3Rz IHRoYXQgYW4gb25nb2luZyBvZmYtY2hhbm5lbCBwZXJpb2QgaXMKKyAzMjY1ICAqICAgICAgYWJv cnRlZCBiZWZvcmUgaXQgZXhwaXJlcy4gVGhpcyBjYWxsYmFjayBtYXkgc2xlZXAuCisgKi8KK3N0 YXRpYyBpbnQgZXNwX29wX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodykKK3sKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3 LT5wcml2OworCisJZXB1Yi0+cm9jX2ZsYWdzID0gMDsJLy8gdG8gZGlzYWJsZSByb2Mgc3RhdGUK KwlzaXBfc2VuZF9yb2MoZXB1YiwgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCit2 b2lkIGVzcF9yb2Nkb25lX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBz aXBfZXZ0X3JvYyAqcmVwb3J0KQoreworCXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBl c3BfcHViICopaHctPnByaXY7CisKKwlpZiAocmVwb3J0LT5pc19vayAhPSAxKQorCQlyZXR1cm47 CisKKwlpZiAocmVwb3J0LT5zdGF0ZSA9PSAxKSB7CisJCWVwdWItPnJvY19mbGFncyA9IDE7CS8v ZmxhZ3MgaW4gcm9jIHN0YXRlLCB0byBmaXggY2hhbm5lbCwgbm90IGNoYW5nZQorCQlpZWVlODAy MTFfcmVhZHlfb25fY2hhbm5lbChodyk7CisJfSBlbHNlIGlmICghcmVwb3J0LT5zdGF0ZSkgewor CQllcHViLT5yb2NfZmxhZ3MgPSAwOworCQlpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhw aXJlZChodyk7CisJfQorfQorCisvKgorIFNldCBhIG1hc2sgb2YgcmF0ZXMgdG8gYmUgdXNlZCBm b3IgcmF0ZSBjb250cm9sIHNlbGVjdGlvbgorIDMyNzUgICogICAgICB3aGVuIHRyYW5zbWl0dGlu ZyBhIGZyYW1lLiBDdXJyZW50bHkgb25seSBsZWdhY3kgcmF0ZXMgYXJlIGhhbmRsZWQuCisgMzI3 NiAgKiAgICAgIFRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyBpbnQgZXNwX29w X3NldF9iaXRyYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0 ZV9tYXNrICptYXNrKQoreworCXJldHVybiAwOworfQorCisvKgorIEZsdXNoIGFsbCBwZW5kaW5n IGZyYW1lcyBmcm9tIHRoZSBoYXJkd2FyZSBxdWV1ZSwgbWFraW5nIHN1cmUKKyAzMjM1ICAqICAg ICAgdGhhdCB0aGUgaGFyZHdhcmUgcXVldWVzIGFyZSBlbXB0eS4gVGhlIEBxdWV1ZXMgcGFyYW1l dGVyIGlzIGEgYml0bWFwCisgMzIzNiAgKiAgICAgIG9mIHF1ZXVlcyB0byBmbHVzaCwgd2hpY2gg aXMgdXNlZnVsIGlmIGRpZmZlcmVudCB2aXJ0dWFsIGludGVyZmFjZXMKKyAzMjM3ICAqICAgICAg dXNlIGRpZmZlcmVudCBoYXJkd2FyZSBxdWV1ZXM7IGl0IG1heSBhbHNvIGluZGljYXRlIGFsbCBx dWV1ZXMuCisgMzIzOCAgKiAgICAgIElmIHRoZSBwYXJhbWV0ZXIgQGRyb3AgaXMgc2V0IHRvICV0 cnVlLCBwZW5kaW5nIGZyYW1lcyBtYXkgYmUgZHJvcHBlZC4KKyAzMjM5ICAqICAgICAgTm90ZSB0 aGF0IHZpZiBjYW4gYmUgTlVMTC4KKyAzMjQwICAqICAgICAgVGhlIGNhbGxiYWNrIGNhbiBzbGVl cC4KKyAqLwordm9pZCBlc3Bfb3BfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQoreworCXN0 cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7CisJdW5zaWdu ZWQgbG9uZyB0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUpOworCisJd2hpbGUg KGF0b21pY19yZWFkKCZlcHViLT5zaXAtPnR4X2RhdGFfcGt0X3F1ZXVlZCkpIHsKKwkJaWYgKCF0 aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lKSkKKwkJCWJyZWFrOworCisJCWlmICghc2lmX2dldF9h dGVfY29uZmlnKCkpCisJCQlpZWVlODAyMTFfcXVldWVfd29yayhlcHViLT5odywgJmVwdWItPnR4 X3dvcmspOworCQllbHNlCisJCQlxdWV1ZV93b3JrKGVwdWItPmVzcF93a3EsICZlcHViLT50eF93 b3JrKTsKKwl9CisKKwltZGVsYXkoMTApOworfQorCisvKgorIFBlcmZvcm0gYSBjZXJ0YWluIEEt TVBEVSBhY3Rpb24KKyAzMTk4ICAqICAgICAgVGhlIFJBL1RJRCBjb21iaW5hdGlvbiBkZXRlcm1p bmVzIHRoZSBkZXN0aW5hdGlvbiBhbmQgVElEIHdlIHdhbnQKKyAzMTk5ICAqICAgICAgdGhlIGFt cGR1IGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgZm9yLiBUaGUgYWN0aW9uIGlzIGRlZmluZWQgdGhy b3VnaAorIDMyMDAgICogICAgICBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24uCisgMzIwMSAg KiAgICAgIFdoZW4gdGhlIGFjdGlvbiBpcyBzZXQgdG8gJUlFRUU4MDIxMV9BTVBEVV9UWF9PUEVS QVRJT05BTCB0aGUgZHJpdmVyCisgMzIwMiAgKiAgICAgIG1heSBuZWl0aGVyIHNlbmQgYWdncmVn YXRlcyBjb250YWluaW5nIG1vcmUgc3ViZnJhbWVzIHRoYW4gQGJ1Zl9zaXplCisgMzIwMyAgKiAg ICAgIG5vciBzZW5kIGFnZ3JlZ2F0ZXMgaW4gYSB3YXkgdGhhdCBsb3N0IGZyYW1lcyB3b3VsZCBl eGNlZWQgdGhlCisgMzIwNCAgKiAgICAgIGJ1ZmZlciBzaXplLiBJZiBqdXN0IGxpbWl0aW5nIHRo ZSBhZ2dyZWdhdGUgc2l6ZSwgdGhpcyB3b3VsZCBiZQorIDMyMDUgICogICAgICBwb3NzaWJsZSB3 aXRoIGEgYnVmX3NpemUgb2YgODoKKyAzMjA2ICAqICAgICAgIC0gVFg6IDEuLi4uLjcKKyAzMjA3 ICAqICAgICAgIC0gUlg6ICAyLi4uLjcgKGxvc3QgZnJhbWUgIzEpCisgMzIwOCAgKiAgICAgICAt IFRYOiAgICAgICAgOC4uMS4uLgorIDMyMDkgICogICAgICB3aGljaCBpcyBpbnZhbGlkIHNpbmNl ICMxIHdhcyBub3cgcmUtdHJhbnNtaXR0ZWQgd2VsbCBwYXN0IHRoZQorIDMyMTAgICogICAgICBi dWZmZXIgc2l6ZSBvZiA4LiBDb3JyZWN0IHdheXMgdG8gcmV0cmFuc21pdCAjMSB3b3VsZCBiZToK KyAzMjExICAqICAgICAgIC0gVFg6ICAgICAgIDEgb3IgMTggb3IgODEKKyAzMjEyICAqICAgICAg RXZlbiAiMTg5IiB3b3VsZCBiZSB3cm9uZyBzaW5jZSAxIGNvdWxkIGJlIGxvc3QgYWdhaW4uCisg MzIxMyAgKgorIDMyMTQgICogICAgICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlLgorIDMyMTUgICogICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICovCitzdGF0 aWMgaW50IGVzcF9vcF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkg ICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgw MjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKQoreworCWVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVf YWN0aW9uIGFjdGlvbiA9IHBhcmFtcy0+YWN0aW9uOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEgPSBwYXJhbXMtPnN0YTsKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1 YiAqKWh3LT5wcml2OworCXN0cnVjdCBlc3Bfbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZXNwX25vZGUg KilzdGEtPmRydl9wcml2OworCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZjsKKwl1 MTYgdGlkID0gcGFyYW1zLT50aWQ7CisJc3RydWN0IGVzcF90eF90aWQgKnRpZF9pbmZvID0gJm5v ZGUtPnRpZFt0aWRdOworCXUxNiAqc3NuID0gJnBhcmFtcy0+c3NuOworCXU4IGJ1Zl9zaXplID0g cGFyYW1zLT5idWZfc2l6ZTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBJRUVFODAyMTFf QU1QRFVfVFhfU1RBUlQ6CisJCWNoYW5kZWYgPSAmZXB1Yi0+aHctPmNvbmYuY2hhbmRlZjsKKwkJ aWYgKG1vZF9zdXBwb3J0X25vX3R4YW1wZHUoKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVk IHx8CisJCSAgICBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKGNoYW5kZWYpID09IE5MODAyMTFf Q0hBTl9OT19IVCkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCQlkZXZfZGJnKGVwdWItPmRl diwgIiVzIFRYIFNUQVJULCBhZGRyOiVwTSx0aWQ6JXUsc3RhdGU6JWRcbiIsCisJCQlfX2Z1bmNf Xywgc3RhLT5hZGRyLCB0aWQsIHRpZF9pbmZvLT5zdGF0ZSk7CisKKwkJc3Bpbl9sb2NrX2JoKCZl cHViLT50eF9hbXBkdV9sb2NrKTsKKworCQlFU1NFUlQodGlkX2luZm8tPnN0YXRlID09IEVTUF9U SURfU1RBVEVfVFJJR0dFUik7CisJCSpzc24gPSB0aWRfaW5mby0+c3NuOworCQl0aWRfaW5mby0+ c3RhdGUgPSBFU1BfVElEX1NUQVRFX1BST0dSRVNTOworCisJCWllZWU4MDIxMV9zdGFydF90eF9i YV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlzcGluX3VubG9ja19iaCgmZXB1 Yi0+dHhfYW1wZHVfbG9jayk7CisKKwkJcmV0dXJuIDA7CisKKwljYXNlIElFRUU4MDIxMV9BTVBE VV9UWF9TVE9QX0NPTlQ6CisJCWRldl9kYmcoZXB1Yi0+ZGV2LCAiJXMgVFggU1RPUCwgYWRkcjol cE0sdGlkOiV1LHN0YXRlOiVkXG4iLAorCQkJX19mdW5jX18sIHN0YS0+YWRkciwgdGlkLCB0aWRf aW5mby0+c3RhdGUpOworCisJCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7CisK KwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOgorCWNhc2UgSUVFRTgwMjExX0FN UERVX1RYX1NUT1BfRkxVU0hfQ09OVDoKKwkJaWYgKHRpZF9pbmZvLT5zdGF0ZSA9PSBFU1BfVElE X1NUQVRFX1dBSVRfU1RPUCkKKwkJCXRpZF9pbmZvLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVfU1RP UDsKKwkJZWxzZQorCQkJdGlkX2luZm8tPnN0YXRlID0gRVNQX1RJRF9TVEFURV9JTklUOworCisJ CWlmIChhY3Rpb24gPT0gSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfQ09OVCkgeworCQkJaWVlZTgw MjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKKwkJCXNwaW5f dW5sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKKwkJfQorCisJCXJldHVybiBzaXBfc2Vu ZF9hbXBkdV9hY3Rpb24oZXB1YiwgU0lQX0FNUERVX1RYX1NUT1AsIHN0YS0+YWRkciwKKwkJCQkJ ICAgICB0aWQsIG5vZGUtPmlmaWR4LCAwKTsKKworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09Q RVJBVElPTkFMOgorCQlkZXZfZGJnKGVwdWItPmRldiwKKwkJCSIlcyBUWCBPUEVSQVRJT04sIGFk ZHI6JXBNLHRpZDoldSxzdGF0ZTolZFxuIiwgX19mdW5jX18sCisJCQlzdGEtPmFkZHIsIHRpZCwg dGlkX2luZm8tPnN0YXRlKTsKKworCQlzcGluX2xvY2tfYmgoJmVwdWItPnR4X2FtcGR1X2xvY2sp OworCisJCWlmICh0aWRfaW5mby0+c3RhdGUgIT0gRVNQX1RJRF9TVEFURV9QUk9HUkVTUykgewor CQkJaWYgKHRpZF9pbmZvLT5zdGF0ZSA9PSBFU1BfVElEX1NUQVRFX0lOSVQpIHsKKwkJCQlwcmlu dGsoS0VSTl9FUlIgIiVzIFdJRkkgUkVTRVQsIElHTk9SRVxuIiwKKwkJCQkgICAgICAgX19mdW5j X18pOworCQkJCXNwaW5fdW5sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKKwkJCQlyZXR1 cm4gLUVORVRSRVNFVDsKKwkJCX0KKworCQkJRVNTRVJUKDApOworCQl9CisKKwkJdGlkX2luZm8t PnN0YXRlID0gRVNQX1RJRF9TVEFURV9PUEVSQVRJT05BTDsKKwkJc3Bpbl91bmxvY2tfYmgoJmVw dWItPnR4X2FtcGR1X2xvY2spOworCisJCXJldHVybiBzaXBfc2VuZF9hbXBkdV9hY3Rpb24oZXB1 YiwgU0lQX0FNUERVX1RYX09QRVJBVElPTkFMLAorCQkJCQkgICAgIHN0YS0+YWRkciwgdGlkLCBu b2RlLT5pZmlkeCwKKwkJCQkJICAgICBidWZfc2l6ZSk7CisKKwljYXNlIElFRUU4MDIxMV9BTVBE VV9SWF9TVEFSVDoKKwkJY2hhbmRlZiA9ICZlcHViLT5ody0+Y29uZi5jaGFuZGVmOworCQlpZiAo bW9kX3N1cHBvcnRfbm9fcnhhbXBkdSgpIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgfHwK KwkJICAgIGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoY2hhbmRlZikgPT0gTkw4MDIxMV9DSEFO X05PX0hUKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCWRldl9kYmcoZXB1Yi0+ZGV2LCAi JXMgUlggU1RBUlQgJXBNIHRpZCAldSAldVxuIiwgX19mdW5jX18sCisJCQlzdGEtPmFkZHIsIHRp ZCwgKnNzbik7CisKKwkJcmV0dXJuIHNpcF9zZW5kX2FtcGR1X2FjdGlvbihlcHViLCBTSVBfQU1Q RFVfUlhfU1RBUlQsIHN0YS0+YWRkciwKKwkJCQkJICAgICB0aWQsICpzc24sIDY0KTsKKworCWNh c2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CisJCWRldl9kYmcoZXB1Yi0+ZGV2LCAiJXMgUlgg U1RPUCAlcE0gdGlkICV1XG4iLCBfX2Z1bmNfXywKKwkJCXN0YS0+YWRkciwgdGlkKTsKKworCQly ZXR1cm4gc2lwX3NlbmRfYW1wZHVfYWN0aW9uKGVwdWIsIFNJUF9BTVBEVV9SWF9TVE9QLCBzdGEt PmFkZHIsCisJCQkJCSAgICAgdGlkLCAwLCAwKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlO VkFMOworCX0KK30KKworc3RhdGljIHZvaWQgZXNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQoreworCXN0cnVjdCBlc3BfcHViICplcHViID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCBlc3BfcHViLCB0eF93b3JrKTsKKworCW11dGV4X2xvY2soJmVwdWItPnR4X210eCk7CisJ c2lwX3R4cV9wcm9jZXNzKGVwdWIpOworCW11dGV4X3VubG9jaygmZXB1Yi0+dHhfbXR4KTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGVzcF9tYWM4MDIxMV9vcHMgPSB7 CisJLnR4ID0gZXNwX29wX3R4LAorCS5zdGFydCA9IGVzcF9vcF9zdGFydCwKKwkuc3RvcCA9IGVz cF9vcF9zdG9wLAorCS5hZGRfaW50ZXJmYWNlID0gZXNwX29wX2FkZF9pbnRlcmZhY2UsCisJLnJl bW92ZV9pbnRlcmZhY2UgPSBlc3Bfb3BfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnID0gZXNw X29wX2NvbmZpZywKKworCS5ic3NfaW5mb19jaGFuZ2VkID0gZXNwX29wX2Jzc19pbmZvX2NoYW5n ZWQsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBlc3Bfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0 X2tleSA9IGVzcF9vcF9zZXRfa2V5LAorCS5zZXRfcnRzX3RocmVzaG9sZCA9IGVzcF9vcF9zZXRf cnRzX3RocmVzaG9sZCwKKwkuc3RhX25vdGlmeSA9IGVzcF9vcF9zdGFfbm90aWZ5LAorCS5jb25m X3R4ID0gZXNwX29wX2NvbmZfdHgsCisJLmNoYW5nZV9pbnRlcmZhY2UgPSBlc3Bfb3BfY2hhbmdl X2ludGVyZmFjZSwKKwkuZ2V0X3RzZiA9IGVzcF9vcF9nZXRfdHNmLAorCS5zZXRfdHNmID0gZXNw X29wX3NldF90c2YsCisJLnJlc2V0X3RzZiA9IGVzcF9vcF9yZXNldF90c2YsCisJLnJma2lsbF9w b2xsID0gZXNwX29wX3Jma2lsbF9wb2xsLAorI2lmZGVmIEhXX1NDQU4KKwkuaHdfc2NhbiA9IGVz cF9vcF9od19zY2FuLAorCS5yZW1haW5fb25fY2hhbm5lbCA9IGVzcF9vcF9yZW1haW5fb25fY2hh bm5lbCwKKwkuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gZXNwX29wX2NhbmNlbF9yZW1haW5f b25fY2hhbm5lbCwKKyNlbmRpZgorCS5hbXBkdV9hY3Rpb24gPSBlc3Bfb3BfYW1wZHVfYWN0aW9u LAorCS5zdGFfYWRkID0gZXNwX29wX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUgPSBlc3Bfb3Bfc3Rh X3JlbW92ZSwKKwkuc2V0X2JpdHJhdGVfbWFzayA9IGVzcF9vcF9zZXRfYml0cmF0ZV9tYXNrLAor CS5mbHVzaCA9IGVzcF9vcF9mbHVzaCwKK307CisKK3N0cnVjdCBlc3BfcHViICplc3BfcHViX2Fs bG9jX21hYzgwMjExKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodzsKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YjsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3 KHNpemVvZihzdHJ1Y3QgZXNwX3B1YiksICZlc3BfbWFjODAyMTFfb3BzKTsKKwlpZiAoIWh3KQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCS8qIEZJWE1FOiB1c2VsZXNzIGlmIGh3X3Nj YW4gaXMgZGVmaW5lZCwgaW5jb3JyZWN0IGlmIGh3X3NjYW4gaXMgdW5kZWZpbmVkKi8KKyNpZmRl ZiBIV19TQ0FOCisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0hBU19SRU1BSU5fT05f Q0hBTk5FTDsKKyNlbmRpZgorCisJZXB1YiA9IGh3LT5wcml2OworCW1lbXNldChlcHViLCAwLCBz aXplb2YoKmVwdWIpKTsKKworCWVwdWItPmh3ID0gaHc7CisJU0VUX0lFRUU4MDIxMV9ERVYoaHcs IGRldik7CisJZXB1Yi0+ZGV2ID0gZGV2OworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZXB1Yi0+ dHhxKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZlcHViLT50eGRvbmVxKTsKKwlza2JfcXVldWVf aGVhZF9pbml0KCZlcHViLT5yeHEpOworCisJc3Bpbl9sb2NrX2luaXQoJmVwdWItPnR4X2FtcGR1 X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZlcHViLT5yeF9hbXBkdV9sb2NrKTsKKwlzcGluX2xv Y2tfaW5pdCgmZXB1Yi0+dHhfbG9jayk7CisJbXV0ZXhfaW5pdCgmZXB1Yi0+dHhfbXR4KTsKKwlz cGluX2xvY2tfaW5pdCgmZXB1Yi0+cnhfbG9jayk7CisKKwlJTklUX1dPUksoJmVwdWItPnR4X3dv cmssIGVzcF90eF93b3JrKTsKKworCWVwdWItPmVzcF93a3EgPSBjcmVhdGVfc2luZ2xldGhyZWFk X3dvcmtxdWV1ZSgiZXNwX3drcSIpOworCisJaWYgKCFlcHViLT5lc3Bfd2txKQorCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKworCWVwdWItPnNjYW5fcGVybWl0X3ZhbGlkID0gZmFsc2U7CisJ SU5JVF9ERUxBWUVEX1dPUksoJmVwdWItPnNjYW5fdGltZW91dF93b3JrLCBod19zY2FuX3RpbWVv dXRfcmVwb3J0KTsKKworCXJldHVybiBlcHViOworfQorCitpbnQgZXNwX3B1Yl9kZWFsbG9jX21h YzgwMjExKHN0cnVjdCBlc3BfcHViICplcHViKQoreworCXNldF9iaXQoRVNQX1dMX0ZMQUdfUkZL SUxMLCAmZXB1Yi0+d2wuZmxhZ3MpOworCisJZGVzdHJveV93b3JrcXVldWUoZXB1Yi0+ZXNwX3dr cSk7CisJbXV0ZXhfZGVzdHJveSgmZXB1Yi0+dHhfbXR4KTsKKworCWlmIChlcHViLT5odykKKwkJ aWVlZTgwMjExX2ZyZWVfaHcoZXB1Yi0+aHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIDJHIGJh bmQgY2hhbm5lbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgZXNwX2NoYW5u ZWxzXzJnaHpbXSA9IHsKKwl7Lmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxNywgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMiwgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyNywgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMiwgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzNywgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0NywgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLm1h eF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5t YXhfcG93ZXIgPSAyNX0sCisJey5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyLCAu bWF4X3Bvd2VyID0gMjV9LAorCXsuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2Nywg Lm1heF9wb3dlciA9IDI1fSwKKwl7Lmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzIs IC5tYXhfcG93ZXIgPSAyNX0sCit9OworCisvKiAxMUcgcmF0ZSAqLworc3RhdGljIHN0cnVjdCBp ZWVlODAyMTFfcmF0ZSBlc3BfcmF0ZXNfMmdoeltdID0geworCXsKKwkJLmJpdHJhdGUgPSAxMCwK KwkJLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8xTUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0 ID0gQ09ORl9IV19CSVRfUkFURV8xTUJQUywKKwl9LAorCXsKKwkJLmJpdHJhdGUgPSAyMCwKKwkJ Lmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8yTUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0g Q09ORl9IV19CSVRfUkFURV8yTUJQUywKKwkJLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRf UFJFQU1CTEV9LAorCXsKKwkJLmJpdHJhdGUgPSA1NSwKKwkJLmh3X3ZhbHVlID0gQ09ORl9IV19C SVRfUkFURV81XzVNQlBTLAorCQkuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzVf NU1CUFMsCisJCS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFfSwKKwl7CisJ CS5iaXRyYXRlID0gMTEwLAorCQkuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzExTUJQUywK KwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xMU1CUFMsCisJCS5mbGFncyA9 IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFfSwKKwl7CisJCS5iaXRyYXRlID0gNjAsCisJ CS5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsCisJCS5od192YWx1ZV9zaG9ydCA9 IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gOTAsCisJCS5o d192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfOU1CUFMsCisJCS5od192YWx1ZV9zaG9ydCA9IENP TkZfSFdfQklUX1JBVEVfOU1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gMTIwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzEyTUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV8xMk1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gMTgwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzE4TUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV8xOE1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gMjQwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzI0TUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV8yNE1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gMzYwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzM2TUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV8zNk1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gNDgwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV80OE1CUFMsCisJfSwKKwl7CisJCS5iaXRyYXRlID0gNTQwLAorCQkuaHdf dmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzU0TUJQUywKKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV81NE1CUFMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjEx X3N0YV9odF9jYXAgZXNwX2h0X2NhcF8yZ2h6ID0geworCS5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQ X0RTU1NDQ0s0MCB8IElFRUU4MDIxMV9IVF9DQVBfU01fUFMgfAorCQlJRUVFODAyMTFfSFRfQ0FQ X1NHSV80MCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwLAorCS5odF9zdXBwb3J0ZWQgPSB0cnVl LAorCS5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SywKKwkuYW1wZHVf ZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfTk9ORSwKKwkubWNzID0geworCQku cnhfbWFzayA9IHsgMHhmZiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfSwKKwl9LAorfTsK Kworc3RhdGljIHZvaWQgZXNwX3B1Yl9pbml0X21hYzgwMjExKHN0cnVjdCBlc3BfcHViICplcHVi KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZXB1Yi0+aHc7CisJc3RydWN0IGllZWU4 MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmRzID0KKwkJJmVwdWItPndsLnNiYW5kc1tOTDgwMjEx X0JBTkRfMkdIWl07CisKKwlzdGF0aWMgY29uc3QgdTMyIGNpcGhlcl9zdWl0ZXNbXSA9IHsKKwkJ V0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAsCisJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCwKKwkJ V0xBTl9DSVBIRVJfU1VJVEVfVEtJUCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCwKKwl9Owor CisJaHctPm1heF9saXN0ZW5faW50ZXJ2YWwgPSAxMDsKKworCWllZWU4MDIxMV9od19zZXQoaHcs IFNJR05BTF9EQk0pOworCWllZWU4MDIxMV9od19zZXQoaHcsIEhBU19SQVRFX0NPTlRST0wpOwor CWllZWU4MDIxMV9od19zZXQoaHcsIFNVUFBPUlRTX1BTKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3 LCBBTVBEVV9BR0dSRUdBVElPTik7CisJaWVlZTgwMjExX2h3X3NldChodywgSE9TVF9CUk9BRENB U1RfUFNfQlVGRkVSSU5HKTsKKwlody0+bWF4X3J4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IElF RUU4MDIxMV9NQVhfQU1QRFVfQlVGOworCWh3LT5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVz ID0gSUVFRTgwMjExX01BWF9BTVBEVV9CVUY7CisKKwlody0+d2lwaHktPmNpcGhlcl9zdWl0ZXMg PSBjaXBoZXJfc3VpdGVzOworCWh3LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0la RShjaXBoZXJfc3VpdGVzKTsKKwlody0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IGVwdWItPnNp cC0+dHhfYmxrc3ogLQorCQlzaXplb2Yoc3RydWN0IHNpcF9oZHIpIC0gc2l6ZW9mKHN0cnVjdCBz aXBfY21kX3NjYW4pOworCisJLyogT05MWSBzdGF0aW9uIGZvciBub3csIHN1cHBvcnQgUDJQIHNv b24uLi4gKi8KKwkvKiBGSVhNRTogaXMgcDJwIHJlYWxseSBzdXBwb3J0ZWQ/ICovCisJaHctPndp cGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8CisJCUJJ VChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9O KSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BUCk7CisKKwlody0+d2lwaHktPm1heF9zY2FuX3Nz aWRzID0gMjsKKwlody0+d2lwaHktPm1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDUw MDA7CisKKwlhdG9taWNfc2V0KCZlcHViLT53bC5vZmYsIDEpOworCisJc2JhbmRzLT5iYW5kID0g Tkw4MDIxMV9CQU5EXzJHSFo7CisJc2JhbmRzLT5jaGFubmVscyA9IGVzcF9jaGFubmVsc18yZ2h6 OworCXNiYW5kcy0+Yml0cmF0ZXMgPSBlc3BfcmF0ZXNfMmdoejsKKwlzYmFuZHMtPm5fY2hhbm5l bHMgPSBBUlJBWV9TSVpFKGVzcF9jaGFubmVsc18yZ2h6KTsKKwlzYmFuZHMtPm5fYml0cmF0ZXMg PSBBUlJBWV9TSVpFKGVzcF9yYXRlc18yZ2h6KTsKKwlzYmFuZHMtPmh0X2NhcCA9IGVzcF9odF9j YXBfMmdoejsKKworCWh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdID0gc2JhbmRz OworCisJLypubyBmcmFnbWVudCAqLworCWh3LT53aXBoeS0+ZnJhZ190aHJlc2hvbGQgPSBJRUVF ODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOworCisJLyogaGFuZGxlIEFDIHF1ZXVlIGluIGYvdyAq LworCWh3LT5xdWV1ZXMgPSA0OworCWh3LT5tYXhfcmF0ZXMgPSA0OworCisJaHctPnZpZl9kYXRh X3NpemUgPSBzaXplb2Yoc3RydWN0IGVzcF92aWYpOworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6 ZW9mKHN0cnVjdCBlc3Bfbm9kZSk7Cit9CisKK2ludCBlc3BfcmVnaXN0ZXJfbWFjODAyMTEoc3Ry dWN0IGVzcF9wdWIgKmVwdWIpCit7CisJaW50IHJldCwgaWR4OworCXU4ICpwMnBfYWRkcjsKKwor CWVzcF9wdWJfaW5pdF9tYWM4MDIxMShlcHViKTsKKworCS8qIEZJWE1FOiBlc3BfbWFjX2FkZHIg Ki8KKwllcHViLT5ody0+d2lwaHktPmFkZHJlc3NlcyA9IChzdHJ1Y3QgbWFjX2FkZHJlc3MgKill c3BfbWFjX2FkZHI7CisKKwltZW1jcHkoZXB1Yi0+aHctPndpcGh5LT5hZGRyZXNzZXNbMF0uYWRk ciwgZXB1Yi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoZXB1Yi0+aHctPndpcGh5LT5h ZGRyZXNzZXNbMV0uYWRkciwgZXB1Yi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlwMnBfYWRkciA9 IGVwdWItPmh3LT53aXBoeS0+YWRkcmVzc2VzWzFdLmFkZHI7CisKKwlmb3IgKGlkeCA9IDA7IGlk eCA8IDggKiBFVEhfQUxFTjsgaWR4KyspIHsKKwkJcDJwX2FkZHJbMF0gPSBlcHViLT5tYWNfYWRk clswXSB8IDB4MDI7CisJCXAycF9hZGRyWzBdIF49IGlkeCA8PCAyOworCQlpZiAoc3RybmNtcChw MnBfYWRkciwgZXB1Yi0+bWFjX2FkZHIsIDYpKQorCQkJYnJlYWs7CisJfQorCisJZXB1Yi0+aHct PndpcGh5LT5uX2FkZHJlc3NlcyA9IDI7CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHco ZXB1Yi0+aHcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygidW5hYmxlIHRvIHJlZ2lzdGVy IG1hYzgwMjExIGh3OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzZXRfYml0 KEVTUF9XTF9GTEFHX0hXX1JFR0lTVEVSRUQsICZlcHViLT53bC5mbGFncyk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdTggZ2V0YWRkcl9pbmRleCh1OCAqYWRkciwgc3RydWN0IGVzcF9w dWIgKmVwdWIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRVNQX1BVQl9NQVhfVklG OyBpKyspCisJCWlmICghbWVtY21wKGFkZHIsIGVwdWItPmh3LT53aXBoeS0+YWRkcmVzc2VzW2ld LmFkZHIsIEVUSF9BTEVOKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIEVTUF9QVUJfTUFYX1ZJ RjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5o IGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21hYzgwMjExLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wM2RlMGIwYTQyMjMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfbWFjODAyMTEuaApAQCAtMCwwICsxLDMzIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgorICog Q29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4gU2NodWx6 IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKi8KKworI2lmbmRlZiBfRVNQX01BQzgwMjExX0hfCisjZGVmaW5lIF9FU1BfTUFD ODAyMTFfSF8KKworc3RydWN0IGVzcF84MDIxMV93bW1fYWNfcGFyYW0geworCXU4IGFjaV9haWZz bjsJCS8qIEFJRlNOLCBBQ00sIEFDSSAqLworCXU4IGN3OwkJCS8qIEVDV21pbiwgRUNXbWF4IChD VyA9IDJeRUNXIC0gMSkgKi8KKwl1MTYgdHhvcF9saW1pdDsKK307CisKK3N0cnVjdCBlc3BfODAy MTFfd21tX3BhcmFtX2VsZW1lbnQgeworCS8qIEVsZW1lbnQgSUTvvJogMjIxICgweGRkKTsgbGVu Z3RoOiAyNCAqLworCS8qIHJlcXVpcmVkIGZpZWxkcyBmb3IgV01NIHZlcnNpb24gMSAqLworCXU4 IG91aVszXTsJCS8qIDAwOjUwOmYyICovCisJdTggb3VpX3R5cGU7CQkvKiAyICovCisJdTggb3Vp X3N1YnR5cGU7CQkvKiAxICovCisJdTggdmVyc2lvbjsJCS8qIDEgZm9yIFdNTSB2ZXJzaW9uIDEu MCAqLworCXU4IHFvc19pbmZvOwkJLyogQVAvU1RBIHNwZWNpZiBRb1MgaW5mbyAqLworCXU4IHJl c2VydmVkOwkJLyogMCAqLworCXN0cnVjdCBlc3BfODAyMTFfd21tX2FjX3BhcmFtIGFjWzRdOwkv KiBBQ19CRSwgQUNfQkssIEFDX1ZJLCBBQ19WTyAqLworfTsKKworI2VuZGlmCQkJCS8qIF9FU1Bf TUFDODAyMTFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9t YWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfbWFpbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzQ2MjE4NDc5MjZjCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21haW4uYwpAQCAtMCwwICsxLDE5OSBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KKyAqIENv cHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVudGluIFNjaHVseiA8 cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUg PGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxu ZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51 eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImVzcF9wdWIuaCIKKyNpbmNsdWRlICJlc3Bfc2lwLmgi CisjaW5jbHVkZSAiZXNwX3NpZi5oIgorI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgorI2luY2x1ZGUg ImVzcF9maWxlLmgiCisjaW5jbHVkZSAiZXNwX3dsLmgiCisKK3N0cnVjdCBjb21wbGV0aW9uICpn bF9ib290dXBfY3BseDsKKworc3RhdGljIGludCBlc3BfZG93bmxvYWRfZncoc3RydWN0IGVzcF9w dWIgKmVwdWIpOworCitzdGF0aWMgaW50IG1vZHBhcmFtX25vX3R4YW1wZHU7CitzdGF0aWMgaW50 IG1vZHBhcmFtX25vX3J4YW1wZHU7CisKK21vZHVsZV9wYXJhbV9uYW1lZChub190eGFtcGR1LCBt b2RwYXJhbV9ub190eGFtcGR1LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhub190eGFt cGR1LCAiRGlzYWJsZSB0eCBhbXBkdS4iKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG5vX3J4YW1w ZHUsIG1vZHBhcmFtX25vX3J4YW1wZHUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5v X3J4YW1wZHUsICJEaXNhYmxlIHJ4IGFtcGR1LiIpOworCitzdGF0aWMgY2hhciAqbW9kcGFyYW1f ZWFnbGVfcGF0aCA9ICIvbGliL2Zpcm13YXJlIjsKKworbW9kdWxlX3BhcmFtX25hbWVkKGVhZ2xl X3BhdGgsIG1vZHBhcmFtX2VhZ2xlX3BhdGgsIGNoYXJwLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RF U0MoZWFnbGVfcGF0aCwgImVhZ2xlIHBhdGgiKTsKKworYm9vbCBtb2Rfc3VwcG9ydF9ub190eGFt cGR1KHZvaWQpCit7CisJcmV0dXJuIG1vZHBhcmFtX25vX3R4YW1wZHU7Cit9CisKK2Jvb2wgbW9k X3N1cHBvcnRfbm9fcnhhbXBkdSh2b2lkKQoreworCXJldHVybiBtb2RwYXJhbV9ub19yeGFtcGR1 OworfQorCitpbnQgZXNwX3B1Yl9pbml0X2FsbChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sKKwlp bnQgcmV0OworCisJLyogY29tcGxldGlvbiBmb3IgYm9vdHVwIGV2ZW50IHBvbGwgKi8KKwlERUNM QVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0ZSk7CisKKwlhdG9taWNfc2V0KCZlcHViLT5w cy5zdGF0ZSwgRVNQX1BNX09GRik7CisKKwlpZiAoZXB1Yi0+c2Rpb19zdGF0ZSA9PSBFU1BfU0RJ T19TVEFURV9GSVJTVF9JTklUKSB7CisJCWVwdWItPnNpcCA9IHNpcF9hdHRhY2goZXB1Yik7CisJ CWlmICghZXB1Yi0+c2lwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIHNpcCBhbGxvYyBmYWls ZWRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJ YXRvbWljX3NldCgmZXB1Yi0+c2lwLT5zdGF0ZSwgU0lQX1BSRVBBUkVfQk9PVCk7CisJCWF0b21p Y19zZXQoJmVwdWItPnNpcC0+dHhfY3JlZGl0cywgMCk7CisJfQorCisJZXB1Yi0+c2lwLT50b19o b3N0X3NlcSA9IDA7CisKKwlyZXQgPSBlc3BfZG93bmxvYWRfZncoZXB1Yik7CisJaWYgKHJldCkg eworCQlwcmludGsoImRvd25sb2FkIGZpcm13YXJlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJZ2xfYm9vdHVwX2NwbHggPSAmY29tcGxldGU7CisJZXB1Yi0+d2FpdF9yZXNldCA9 IDA7CisJc2lmX2VuYWJsZV9pcnEoZXB1Yik7CisKKwlpZiAoZXB1Yi0+c2Rpb19zdGF0ZSA9PSBF U1BfU0RJT19TVEFURV9TRUNPTkRfSU5JVCB8fAorCSAgICBzaWZfZ2V0X2F0ZV9jb25maWcoKSA9 PSAxKSB7CisJCXJldCA9IHNpcF9wb2xsX2Jvb3R1cF9ldmVudChlcHViLT5zaXApOworCX0gZWxz ZSB7CisJCXJldCA9IHNpcF9wb2xsX3Jlc2V0dGluZ19ldmVudChlcHViLT5zaXApOworCQlpZiAo IXJldCkgeworCQkJc2lmX2xvY2tfYnVzKGVwdWIpOworCQkJc2lmX2ludGVycnVwdF90YXJnZXQo ZXB1YiwgNyk7CisJCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKKwkJfQorCX0KKworCWdsX2Jvb3R1 cF9jcGx4ID0gTlVMTDsKKworCWlmIChzaWZfZ2V0X2F0ZV9jb25maWcoKSA9PSAxKQorCQlyZXQg PSAtRU9QTk9UU1VQUDsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZXNwX2RzcihzdHJ1Y3Qg ZXNwX3B1YiAqZXB1YikKK3sKKwlzaXBfcngoZXB1Yik7Cit9CisKK3N0cnVjdCBlc3BfZndfaGRy IHsKKwl1OCBtYWdpYzsKKwl1OCBibG9ja3M7CisJdTggcGFkWzJdOworCXUzMiBlbnRyeV9hZGRy OworfSBfX3BhY2tlZDsKKworc3RydWN0IGVzcF9md19ibGtfaGRyIHsKKwl1MzIgbG9hZF9hZGRy OworCXUzMiBkYXRhX2xlbjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgRVNQX0ZXX05BTUUxICJl YWdsZV9md19hdGVfY29uZmlnX3YxOS5iaW4iCisjZGVmaW5lIEVTUF9GV19OQU1FMiAiZWFnbGVf ZndfZmlyc3RfaW5pdF92MTkuYmluIgorI2RlZmluZSBFU1BfRldfTkFNRTMgImVhZ2xlX2Z3X3Nl Y29uZF9pbml0X3YxOS5iaW4iCisKK3N0YXRpYyBpbnQgZXNwX2Rvd25sb2FkX2Z3KHN0cnVjdCBl c3BfcHViICplcHViKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJc3Ry dWN0IGVzcF9md19oZHIgKmZoZHI7CisJc3RydWN0IGVzcF9md19ibGtfaGRyICpiaGRyOworCXN0 cnVjdCBzaXBfY21kX2Jvb3R1cCBib290Y21kOworCXU4ICpmd19idWY7CisJdTMyIG9mZnNldDsK KwlpbnQgcmV0OworCXU4IGJsb2NrczsKKwljaGFyICplc3BfZndfbmFtZTsKKworCWlmIChzaWZf Z2V0X2F0ZV9jb25maWcoKSA9PSAxKQorCQllc3BfZndfbmFtZSA9IEVTUF9GV19OQU1FMzsKKwll bHNlCisJCWVzcF9md19uYW1lID0gZXB1Yi0+c2Rpb19zdGF0ZSA9PSBFU1BfU0RJT19TVEFURV9G SVJTVF9JTklUID8gRVNQX0ZXX05BTUUxIDogRVNQX0ZXX05BTUUyOworCisJcmV0ID0gcmVxdWVz dF9maXJtd2FyZSgmZndfZW50cnksIGVzcF9md19uYW1lLCBlcHViLT5kZXYpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlmd19idWYgPSBrbWVtZHVwKGZ3X2VudHJ5LT5kYXRhLCBmd19l bnRyeS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsK KworCWlmICghZndfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZoZHIgPSAoc3RydWN0IGVz cF9md19oZHIgKilmd19idWY7CisJaWYgKGZoZHItPm1hZ2ljICE9IDB4RTkpIHsKKwkJcHJpbnRr KCIlcyB3cm9uZyBmaXJtd2FyZSBtYWdpYyFcbiIsIF9fZnVuY19fKTsKKwkJZ290byBfZXJyOwor CX0KKworCWJsb2NrcyA9IGZoZHItPmJsb2NrczsKKwlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGVz cF9md19oZHIpOworCisJd2hpbGUgKGJsb2NrcykgeworCQliaGRyID0gKHN0cnVjdCBlc3BfZndf YmxrX2hkciAqKSZmd19idWZbb2Zmc2V0XTsKKwkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZXNw X2Z3X2Jsa19oZHIpOworCisJCXJldCA9IHNpcF93cml0ZV9tZW1vcnkoZXB1Yi0+c2lwLCBiaGRy LT5sb2FkX2FkZHIsCisJCQkJICAgICAgICZmd19idWZbb2Zmc2V0XSwgYmhkci0+ZGF0YV9sZW4p OworCQlpZiAocmV0KSB7CisJCQlwcmludGsoImZhaWxlZCB0byB3cml0ZSBmaXJtd2FyZTogJWRc biIsIHJldCk7CisJCQlnb3RvIF9lcnI7CisJCX0KKworCQlibG9ja3MtLTsKKwkJb2Zmc2V0ICs9 IGJoZHItPmRhdGFfbGVuOworCX0KKworCS8qIFRPRE86IGxhc3QgYnl0ZSBzaG91bGQgYmUgdGhl IGNoZWNrc3VtIGFuZCBza2lwIGNoZWNrc3VtIGZvciBub3cgKi8KKworCWJvb3RjbWQuYm9vdF9h ZGRyID0gZmhkci0+ZW50cnlfYWRkcjsKKwlyZXQgPSBzaXBfc2VuZF9jbWQoZXB1Yi0+c2lwLCBT SVBfQ01EX0JPT1RVUCwKKwkJCSAgIHNpemVvZihzdHJ1Y3Qgc2lwX2NtZF9ib290dXApLCAmYm9v dGNtZCk7CisJaWYgKHJldCkKKwkJZ290byBfZXJyOworCitfZXJyOgorCWtmcmVlKGZ3X2J1Zik7 CisKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfRklSTVdBUkUoRVNQX0ZXX05BTUUxKTsKK01P RFVMRV9GSVJNV0FSRShFU1BfRldfTkFNRTIpOworTU9EVUxFX0ZJUk1XQVJFKEVTUF9GV19OQU1F Myk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfcHViLmggYi9kcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfcHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5lMzI5ZmIwOTk5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfcHViLmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTEgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIw MTcgRnJlZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6 QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisj aWZuZGVmIF9FU1BfUFVCX0hfCisjZGVmaW5lIF9FU1BfUFVCX0hfCisKKyNpbmNsdWRlIDxsaW51 eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUg PGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxu ZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJzaXAy X2NvbW1vbi5oIgorCitlbnVtIGVzcF9zZGlvX3N0YXRlIHsKKwlFU1BfU0RJT19TVEFURV9GSVJT VF9JTklULAorCUVTUF9TRElPX1NUQVRFX0ZJUlNUX05PUk1BTF9FWElULAorCUVTUF9TRElPX1NU QVRFX0ZJUlNUX0VSUk9SX0VYSVQsCisJRVNQX1NESU9fU1RBVEVfU0VDT05EX0lOSVQsCisJRVNQ X1NESU9fU1RBVEVfU0VDT05EX0VSUk9SX0VYSVQsCit9OworCitlbnVtIGVzcF90aWRfc3RhdGUg eworCUVTUF9USURfU1RBVEVfSU5JVCwKKwlFU1BfVElEX1NUQVRFX1RSSUdHRVIsCisJRVNQX1RJ RF9TVEFURV9QUk9HUkVTUywKKwlFU1BfVElEX1NUQVRFX09QRVJBVElPTkFMLAorCUVTUF9USURf U1RBVEVfV0FJVF9TVE9QLAorCUVTUF9USURfU1RBVEVfU1RPUCwKK307CisKK3N0cnVjdCBlc3Bf dHhfdGlkIHsKKwl1OCBzdGF0ZTsKKwl1OCBjbnQ7CisJdTE2IHNzbjsKK307CisKKyNkZWZpbmUg V01FX05VTV9USUQgMTYKK3N0cnVjdCBlc3Bfbm9kZSB7CisJc3RydWN0IGVzcF90eF90aWQgdGlk W1dNRV9OVU1fVElEXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXU4IGlmaWR4Owor CXU4IGluZGV4OworfTsKKworI2RlZmluZSBXTUVfQUNfQkUgMgorI2RlZmluZSBXTUVfQUNfQksg MworI2RlZmluZSBXTUVfQUNfVkkgMQorI2RlZmluZSBXTUVfQUNfVk8gMAorCitzdHJ1Y3QgZXNw X3ZpZiB7CisJc3RydWN0IGVzcF9wdWIgKmVwdWI7CisJdTggaW5kZXg7CisJdTMyIGJlYWNvbl9p bnRlcnZhbDsKKwlib29sIGFwX3VwOworCXN0cnVjdCB0aW1lcl9saXN0IGJlYWNvbl90aW1lcjsK K307CisKKy8qIFdMQU4gcmVsYXRlZCwgbW9zdGx5Li4uICovCisvKnN0cnVjdCBod19zY2FuX3Rp bWVvdXQgeworICogc3RydWN0IGRlbGF5ZWRfd29yayB3OworICogc3RydWN0IGllZWU4MDIxMV9o dyAqaHc7CisgKiB9OworICovCisKK3N0cnVjdCBlc3Bfd2wgeworCXU4IGJzc2lkW0VUSF9BTEVO XTsKKwl1OCByZXFfYnNzaWRbRVRIX0FMRU5dOworCisJLy9zdHJ1Y3QgaHdfc2Nhbl90aW1lb3V0 ICpoc2Q7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7CisJYXRvbWlj X3QgcHRrX2NudDsKKwlhdG9taWNfdCBndGtfY250OworCWF0b21pY190IHRraXBfa2V5X3NldDsK KworCS8qIHNvIGZhciBvbmx5IDJHIGJhbmQgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRl ZF9iYW5kIHNiYW5kc1tOVU1fTkw4MDIxMV9CQU5EU107CisKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCWF0b21pY190IG9mZjsKK307CisKK3N0cnVjdCBlc3BfaHdfaWR4X21hcCB7CisJdTggbWFj W0VUSF9BTEVOXTsKKwl1OCBmbGFnOworfTsKKworI2RlZmluZSBFU1BfV0xfRkxBR19SRktJTEwJ CUJJVCgwKQorI2RlZmluZSBFU1BfV0xfRkxBR19IV19SRUdJU1RFUkVECUJJVCgxKQorI2RlZmlu ZSBFU1BfV0xfRkxBR19DT05ORUNUCQlCSVQoMikKKyNkZWZpbmUgRVNQX1dMX0ZMQUdfU1RPUF9U WFEJCUJJVCgzKQorCisjZGVmaW5lIEVTUF9QVUJfTUFYX1ZJRgkJCTIKKyNkZWZpbmUgRVNQX1BV Ql9NQVhfU1RBCQkJNAkvL2ZvciBvbmUgaW50ZXJmYWNlCisjZGVmaW5lIEVTUF9QVUJfTUFYX1JY QU1QRFUJCTgJLy9mb3IgYWxsIGludGVyZmFjZXMKKworZW51bSB7CisJRVNQX1BNX09GRiA9IDAs CisJRVNQX1BNX1RVUk5JTkdfT04sCisJRVNQX1BNX09OLAorCUVTUF9QTV9UVVJOSU5HX09GRiwJ LyogRG8gTk9UIGNoYW5nZSB0aGUgb3JkZXIgKi8KK307CisKK3N0cnVjdCBlc3BfcHMgeworCXUz MiBkdGltX3BlcmlvZDsKKwl1MzIgbWF4X3NsZWVwX3BlcmlvZDsKKwl1bnNpZ25lZCBsb25nIGxh c3RfY29uZmlnX3RpbWU7CisJYXRvbWljX3Qgc3RhdGU7CisJYm9vbCBudWxsZGF0YV9wbV9vbjsK K307CisKK3N0cnVjdCBlc3BfbWFjX3ByZWZpeCB7CisJdTggbWFjX2luZGV4OworCXU4IG1hY19h ZGRyX3ByZWZpeFszXTsKK307CisKK3N0cnVjdCBlc3BfcHViIHsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZjsKKwl1OCB2aWZfc2xvdDsKKworCXN0cnVjdCBlc3Bfc2Rpb19jdHJsICpzaWY7IC8qIHNlcmlh bCBpbnRlcmZhY2UgY29udHJvbCBibG9jaywgZS5nLiBzZGlvICovCisJZW51bSBlc3Bfc2Rpb19z dGF0ZSBzZGlvX3N0YXRlOworCXN0cnVjdCBlc3Bfc2lwICpzaXA7CisJc3RydWN0IGVzcF93bCB3 bDsKKwlzdHJ1Y3QgZXNwX2h3X2lkeF9tYXAgaGlfbWFwWzE5XTsKKwlzdHJ1Y3QgZXNwX2h3X2lk eF9tYXAgbG93X21hcFtFU1BfUFVCX01BWF9WSUZdWzJdOworCS8vdTMyIGZsYWdzOyAvL2ZsYWdz IHRvIHJlcHJlc2VudCByZmtpbGwgc3dpdGNoLHN0YXJ0CisJdTggcm9jX2ZsYWdzOyAgIC8vMDog bm90IGluIHJlbWFpbiBvbiBjaGFubmVsIHN0YXRlLCAxOiBpbiByb2Mgc3RhdGUKKworCXN0cnVj dCB3b3JrX3N0cnVjdCB0eF93b3JrOyAvKiBhdHRhY2ggdG8gaWVlZTgwMjExIHdvcmtxdWV1ZSAq LworCS8qIGxhdGVzdCBtYWM4MDIxMSBoYXMgbXVsdGlwbGUgdHggcXVldWUsIGJ1dCB3ZSBzdGlj ayB3aXRoIHNpbmdsZSBxdWV1ZSBub3cgKi8KKwlzcGlubG9ja190IHJ4X2xvY2s7CisJc3Bpbmxv Y2tfdCB0eF9hbXBkdV9sb2NrOworCXNwaW5sb2NrX3QgcnhfYW1wZHVfbG9jazsKKwlzcGlubG9j a190IHR4X2xvY2s7CisJc3RydWN0IG11dGV4IHR4X210eDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFk IHR4cTsKKwlhdG9taWNfdCB0eHFfc3RvcHBlZDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZW5k dXBfd29yazsJLyogYXR0YWNoIHRvIGllZWU4MDIxMSB3b3JrcXVldWUgKi8KKwlzdHJ1Y3Qgc2tf YnVmZl9oZWFkIHR4ZG9uZXE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeHE7CisKKwlzdHJ1Y3Qg d29ya3F1ZXVlX3N0cnVjdCAqZXNwX3drcTsKKworCS8vdTggYnNzaWRbRVRIX0FMRU5dOworCXU4 IG1hY19hZGRyW0VUSF9BTEVOXTsKKworCXUzMiByeF9maWx0ZXI7CisJdW5zaWduZWQgbG9uZyBz Y2FuX3Blcm1pdDsKKwlib29sIHNjYW5fcGVybWl0X3ZhbGlkOworCXN0cnVjdCBkZWxheWVkX3dv cmsgc2Nhbl90aW1lb3V0X3dvcms7CisJdTMyIGVub2Rlc19tYXA7CisJdTggcnhhbXBkdV9tYXA7 CisJdTMyIGVub2Rlc19tYXBzW0VTUF9QVUJfTUFYX1ZJRl07CisJc3RydWN0IGVzcF9ub2RlICpl bm9kZXNbRVNQX1BVQl9NQVhfU1RBICsgMV07CisJc3RydWN0IGVzcF9ub2RlICpyeGFtcGR1X25v ZGVbRVNQX1BVQl9NQVhfUlhBTVBEVV07CisJdTggcnhhbXBkdV90aWRbRVNQX1BVQl9NQVhfUlhB TVBEVV07CisJc3RydWN0IGVzcF9wcyBwczsKKwlpbnQgZW5hYmxlX2ludDsKKwlpbnQgd2FpdF9y ZXNldDsKK307CisKK3N0cnVjdCBlc3BfcHViICplc3BfcHViX2FsbG9jX21hYzgwMjExKHN0cnVj dCBkZXZpY2UgKmRldik7CitpbnQgZXNwX3B1Yl9kZWFsbG9jX21hYzgwMjExKHN0cnVjdCBlc3Bf cHViICplcHViKTsKK2ludCBlc3BfcmVnaXN0ZXJfbWFjODAyMTEoc3RydWN0IGVzcF9wdWIgKmVw dWIpOworCitpbnQgZXNwX3B1Yl9pbml0X2FsbChzdHJ1Y3QgZXNwX3B1YiAqZXB1Yik7CisKK3Zv aWQgZXNwX2RzcihzdHJ1Y3QgZXNwX3B1YiAqZXB1Yik7Cit2b2lkIGh3X3NjYW5fZG9uZShzdHJ1 Y3QgZXNwX3B1YiAqZXB1YiwgYm9vbCBhYm9ydGVkKTsKK3ZvaWQgZXNwX3JvY2RvbmVfcHJvY2Vz cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNpcF9ldnRfcm9jICpyZXBvcnQpOwor CitzdHJ1Y3QgZXNwX25vZGUgKmVzcF9nZXRfbm9kZV9ieV9hZGRyKHN0cnVjdCBlc3BfcHViICpl cHViLCBjb25zdCB1OCAqYWRkcik7CitpbnQgZXNwX2dldF9lbXB0eV9yeGFtcGR1KHN0cnVjdCBl c3BfcHViICplcHViLCBjb25zdCB1OCAqYWRkciwgdTggdGlkKTsKK2ludCBlc3BfZ2V0X2V4aXN0 X3J4YW1wZHUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIGNvbnN0IHU4ICphZGRyLCB1OCB0aWQpOwor CisjZW5kaWYgLyogX0VTUF9QVUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L2VzcF9zaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaWYuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI5MzY0MGIxMWIwYwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaWYuaApAQCAtMCwwICsx LDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5c3Rl bS4KKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVudGlu IFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0VTUF9TSUZfSF8KKyNkZWZpbmUgX0VTUF9T SUZfSF8KKworI2luY2x1ZGUgImVzcF9wdWIuaCIKKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5o PgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworLyogSC9XIFNMQyBtb2R1bGUgZGVmaW5p dGlvbnMgKi8KKworI2RlZmluZSBTSUZfU0xDX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgNTEy CisKKy8qIFMvVyBzdHJ1Y3QgbWFwcGluZyB0byBzbGMgcmVnaXN0ZXJzICovCitzdHJ1Y3Qgc2xj X2hvc3RfcmVncyB7CisJLyogZG8gTk9UIHJlYWQgdG9rZW5fcmRhdGEKKwkgKgorCSAqIHUzMiBw Zl9kYXRhOworCSAqIHUzMiB0b2tlbl9yZGF0YTsKKwkgKi8KKwl1MzIgaW50cl9yYXc7CisJdTMy IHN0YXRlX3cwOworCXUzMiBzdGF0ZV93MTsKKwl1MzIgY29uZmlnX3cwOworCXUzMiBjb25maWdf dzE7CisJdTMyIGludHJfc3RhdHVzOworCXUzMiBjb25maWdfdzI7CisJdTMyIGNvbmZpZ193MzsK Kwl1MzIgY29uZmlnX3c0OworCXUzMiB0b2tlbl93ZGF0YTsKKwl1MzIgaW50cl9jbGVhcjsKKwl1 MzIgaW50cl9lbmFibGU7Cit9OworCitlbnVtIGlvX3N5bmNfdHlwZSB7CisJRVNQX1NJRl9OT1NZ TkMgPSAwLAorCUVTUF9TSUZfU1lOQywKK307CisKK3N0cnVjdCBlc3Bfc2Rpb19jdHJsIHsKKwlz dHJ1Y3Qgc2Rpb19mdW5jICpmdW5jOworCXN0cnVjdCBlc3BfcHViICplcHViOworCisJc3RydWN0 IGxpc3RfaGVhZCBmcmVlX3JlcTsKKworCXU4ICpkbWFfYnVmZmVyOworCisJc3BpbmxvY2tfdCBz Y2F0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzY2F0X3JlcTsKKworCWJvb2wgb2ZmOworCWF0 b21pY190IGlycV9oYW5kbGluZzsKKwljb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkOwor CXUzMiBzbGNfYmxrX3N6OworCXUzMiB0YXJnZXRfaWQ7CisJdTMyIHNsY193aW5kb3dfZW5kX2Fk ZHI7CisKKwlzdHJ1Y3Qgc2xjX2hvc3RfcmVncyBzbGNfcmVnczsKKwlhdG9taWNfdCBpcnFfaW5z dGFsbGVkOworCit9OworCisjZGVmaW5lIFNJRl9UT19ERVZJQ0UJCTB4MQorI2RlZmluZSBTSUZf RlJPTV9ERVZJQ0UJCTB4MgorCisjZGVmaW5lIFNJRl9TWU5DCQkweDAwMDAwMDEwCisjZGVmaW5l IFNJRl9BU1lOQwkJMHgwMDAwMDAyMAorCisjZGVmaW5lIFNJRl9CWVRFX0JBU0lTCQkweDAwMDAw MDQwCisjZGVmaW5lIFNJRl9CTE9DS19CQVNJUwkJMHgwMDAwMDA4MAorCisjZGVmaW5lIFNJRl9G SVhFRF9BRERSCQkweDAwMDAwMTAwCisjZGVmaW5lIFNJRl9JTkNfQUREUgkJMHgwMDAwMDIwMAor Cit2b2lkIHNkaW9faW9fd3JpdGViKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCB2YWx1ZSwgaW50 IGFkZHIsIGludCAqcmVzKTsKK3U4IHNkaW9faW9fcmVhZGIoc3RydWN0IGVzcF9wdWIgKmVwdWIs IGludCBhZGRyLCBpbnQgKnJlcyk7CisKK3ZvaWQgc2lmX2VuYWJsZV9pcnEoc3RydWN0IGVzcF9w dWIgKmVwdWIpOwordm9pZCBzaWZfZGlzYWJsZV9pcnEoc3RydWN0IGVzcF9wdWIgKmVwdWIpOwor dm9pZCBzaWZfZGlzYWJsZV90YXJnZXRfaW50ZXJydXB0KHN0cnVjdCBlc3BfcHViICplcHViKTsK KwordTMyIHNpZl9nZXRfYmxrc3ooc3RydWN0IGVzcF9wdWIgKmVwdWIpOworCit2b2lkIHNpZl9k c3Ioc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7CitpbnQgc2lmX2lvX3JhdyhzdHJ1Y3QgZXNwX3B1 YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4sIHUzMiBmbGFnKTsKK2ludCBzaWZf aW9fc3luYyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4s IHUzMiBmbGFnKTsKK2ludCBzaWZfbGxkZXNjX3JlYWRfc3luYyhzdHJ1Y3QgZXNwX3B1YiAqZXB1 YiwgdTggKmJ1ZiwgdTMyIGxlbik7CitpbnQgc2lmX2xsZGVzY193cml0ZV9zeW5jKHN0cnVjdCBl c3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuKTsKK2ludCBzaWZfbGxkZXNjX3JlYWRfcmF3 KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuLCBib29sIG5vcm91bmQpOwor aW50IHNpZl9sbGRlc2Nfd3JpdGVfcmF3KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1 MzIgbGVuKTsKKworaW50IGVzcF9jb21tb25fcmVhZChzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTgg KmJ1ZiwgdTMyIGxlbiwgaW50IHN5bmMsCisJCSAgICBib29sIG5vcm91bmQpOworaW50IGVzcF9j b21tb25fd3JpdGUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4ICpidWYsIHUzMiBsZW4sIGludCBz eW5jKTsKK2ludCBlc3BfY29tbW9uX3JlYWRfd2l0aF9hZGRyKHN0cnVjdCBlc3BfcHViICplcHVi LCB1MzIgYWRkciwgdTggKmJ1ZiwgdTMyIGxlbiwKKwkJCSAgICAgIGludCBzeW5jKTsKK2ludCBl c3BfY29tbW9uX3dyaXRlX3dpdGhfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIs IHU4ICpidWYsCisJCQkgICAgICAgdTMyIGxlbiwgaW50IHN5bmMpOworCitpbnQgZXNwX2NvbW1v bl9yZWFkYnl0ZV93aXRoX2FkZHIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAq YnVmLAorCQkJCSAgaW50IHN5bmMpOworaW50IGVzcF9jb21tb25fd3JpdGVieXRlX3dpdGhfYWRk cihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4IGJ1ZiwKKwkJCQkgICBpbnQgc3lu Yyk7CisKK3N0cnVjdCBzbGNfaG9zdF9yZWdzICpzaWZfZ2V0X3JlZ3Moc3RydWN0IGVzcF9wdWIg KmVwdWIpOworCit2b2lkIHNpZl9sb2NrX2J1cyhzdHJ1Y3QgZXNwX3B1YiAqZXB1Yik7Cit2b2lk IHNpZl91bmxvY2tfYnVzKHN0cnVjdCBlc3BfcHViICplcHViKTsKKworaW50IHNpZl9pbnRlcnJ1 cHRfdGFyZ2V0KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBpbmRleCk7CisKK3ZvaWQgY2hlY2tf dGFyZ2V0X2lkKHN0cnVjdCBlc3BfcHViICplcHViKTsKKwordm9pZCBzaWZfcmVjb3JkX2J0X2Nv bmZpZyhpbnQgdmFsdWUpOworaW50IHNpZl9nZXRfYnRfY29uZmlnKHZvaWQpOwordm9pZCBzaWZf cmVjb3JkX3JzdF9jb25maWcoaW50IHZhbHVlKTsKK2ludCBzaWZfZ2V0X3JzdF9jb25maWcodm9p ZCk7Cit2b2lkIHNpZl9yZWNvcmRfYXRlX2NvbmZpZyhpbnQgdmFsdWUpOworaW50IHNpZl9nZXRf YXRlX2NvbmZpZyh2b2lkKTsKK3ZvaWQgc2lmX3JlY29yZF93YWtldXBfZ3Bpb19jb25maWcoaW50 IHZhbHVlKTsKK2ludCBzaWZfZ2V0X3dha2V1cF9ncGlvX2NvbmZpZyh2b2lkKTsKKyNlbmRpZgkJ CQkvKiBfRVNQX1NJRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX3NpcC5jIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTFmYjY0YzliNzk0Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5jCkBAIC0wLDAgKzEsMTcxOCBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KKyAq IENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVudGluIFNjaHVs eiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxu ZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51 eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9t bWMvY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KKyNpbmNsdWRlIDxsaW51eC9t bWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KKyNpbmNsdWRlIDxs aW51eC9tbWMvc2Rpb19pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgorI2luY2x1 ZGUgPGxpbnV4L21tYy9zZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworI2lu Y2x1ZGUgImVzcF9tYWM4MDIxMS5oIgorI2luY2x1ZGUgImVzcF9wdWIuaCIKKyNpbmNsdWRlICJl c3Bfc2lwLmgiCisjaW5jbHVkZSAiZXNwX2N0cmwuaCIKKyNpbmNsdWRlICJlc3Bfc2lmLmgiCisj aW5jbHVkZSAiZXNwX2RlYnVnLmgiCisjaW5jbHVkZSAic2xjX2hvc3RfcmVnaXN0ZXIuaCIKKyNp bmNsdWRlICJlc3Bfd21hYy5oIgorI2luY2x1ZGUgImVzcF91dGlscy5oIgorCitleHRlcm4gc3Ry dWN0IGNvbXBsZXRpb24gKmdsX2Jvb3R1cF9jcGx4OworCitzdGF0aWMgaW50IG9sZF9zaWduYWwg PSAtMzU7CitzdGF0aWMgaW50IGF2Z19zaWduYWw7CitzdGF0aWMgaW50IHNpZ25hbF9sb29wOwor CitzdHJ1Y3QgZXNwX21hY19wcmVmaXggZXNwX21hY19wcmVmaXhfdGFibGVbXSA9IHsKKwl7MCwg ezB4MTgsIDB4ZmUsIDB4MzR9IH0sCisJezEsIHsweGFjLCAweGQwLCAweDc0fSB9LAorCXsyNTUs IHsweDE4LCAweGZlLCAweDM0fSB9LAorfTsKKworI2RlZmluZSBTSUdOQUxfQ09VTlQgIDMwMAor CisvKiBGSVhNRTogSW5jb21wbGV0ZSB0ZXJuYXJ5IGNvbmRpdGlvbiAqLworI2RlZmluZSBUSURf VE9fQUMoX3RpZCkgKCEoX3RpZCkgfHwgKF90aWQpID09IDMgPyBXTUVfQUNfQkUgOiAoKF90aWQp IDwgMyA/IFdNRV9BQ19CSyA6ICgoX3RpZCkgPCA2ID8gV01FX0FDX1ZJIDogV01FX0FDX1ZPKSkp CisKKyNkZWZpbmUgZXNwX3NpcF9kYmcgZXNwX2RiZworc3RydWN0IHNpcF90cmFjZSB7CisJdTMy IHR4X2RhdGE7CisJdTMyIHR4X2NtZDsKKwl1MzIgcnhfZGF0YTsKKwl1MzIgcnhfZXZ0OworCXUz MiByeF90eF9zdGF0dXM7CisJdTMyIHR4X291dF9vZl9jcmVkaXQ7CisJdTMyIHR4X29uZV9zaG90 X292ZXJmbG93OworfTsKKworc3RhdGljIHN0cnVjdCBzaXBfdHJhY2Ugc3RyOworCisjZGVmaW5l IFNUUkFDRV9UWF9EQVRBX0lOQygpIChzdHIudHhfZGF0YSsrKQorI2RlZmluZSBTVFJBQ0VfVFhf Q01EX0lOQygpICAoc3RyLnR4X2NtZCsrKQorI2RlZmluZSBTVFJBQ0VfUlhfREFUQV9JTkMoKSAo c3RyLnJ4X2RhdGErKykKKyNkZWZpbmUgU1RSQUNFX1JYX0VWRU5UX0lOQygpIChzdHIucnhfZXZ0 KyspCisjZGVmaW5lIFNUUkFDRV9SWF9UWFNUQVRVU19JTkMoKSAoc3RyLnJ4X3R4X3N0YXR1cysr KQorI2RlZmluZSBTVFJBQ0VfVFhfT1VUX09GX0NSRURJVF9JTkMoKSAoc3RyLnR4X291dF9vZl9j cmVkaXQrKykKKyNkZWZpbmUgU1RSQUNFX1RYX09ORV9TSE9UX0lOQygpIChzdHIudHhfb25lX3No b3Rfb3ZlcmZsb3crKykKKworI2RlZmluZSBTSVBfU1RPUF9RVUVVRV9USFJFU0hPTEQgNDgKKyNk ZWZpbmUgU0lQX1JFU1VNRV9RVUVVRV9USFJFU0hPTEQgIDEyCisKKyNkZWZpbmUgU0lQX01JTl9E QVRBX1BLVF9MRU4gICAgKHNpemVvZihzdHJ1Y3QgZXNwX21hY19yeF9jdHJsKSArIDI0KQkvLzI0 IGlzIG1pbiA4MDIxMWhkcgorCitzdGF0aWMgdm9pZCBzaXBfcmVjYWxjX2NyZWRpdF9pbml0KHN0 cnVjdCBlc3Bfc2lwICpzaXApOworCitzdGF0aWMgaW50IHNpcF9yZWNhbGNfY3JlZGl0X2NsYWlt KHN0cnVjdCBlc3Bfc2lwICpzaXAsIGludCBmb3JjZSk7CisKK3N0YXRpYyB2b2lkIHNpcF9yZWNh bGNfY3JlZGl0X3JlbGVhc2Uoc3RydWN0IGVzcF9zaXAgKnNpcCk7CisKK3N0YXRpYyBzdHJ1Y3Qg c2lwX3BrdCAqc2lwX2dldF9jdHJsX2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLAorCQkJCQllbnVt IHNpcF9idWZfdHlwZSBiZnR5cGUpOworCitzdGF0aWMgdm9pZCBzaXBfcmVjbGFpbV9jdHJsX2J1 ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2lwX3BrdCAqcGt0LAorCQkJCSBlbnVtIHNp cF9idWZfdHlwZSBiZnR5cGUpOworCitzdGF0aWMgdm9pZCBzaXBfZnJlZV9pbml0X2N0cmxfYnVm KHN0cnVjdCBlc3Bfc2lwICpzaXApOworCitzdGF0aWMgaW50IHNpcF9wYWNrX3BrdChzdHJ1Y3Qg ZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJaW50ICpwbV9zdGF0ZSk7CisK K3N0YXRpYyBzdHJ1Y3QgZXNwX21hY19yeF9jdHJsICpzaXBfcGFyc2Vfbm9ybWFsX21hY19jdHJs KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkJIGludCAqcGt0X2xlbl9lbmMsCisJCQkJCQkJ IGludCAqYnVmX2xlbiwKKwkJCQkJCQkgaW50ICpwdWxsZWRfbGVuKTsKKworc3RhdGljIHN0cnVj dCBza19idWZmICpzaXBfcGFyc2VfZGF0YV9yeF9pbmZvKHN0cnVjdCBlc3Bfc2lwICpzaXAsCisJ CQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIGludCBwa3RfbGVuX2Vu YywgaW50IGJ1Zl9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwgKm1hY19j dHJsLAorCQkJCQkgICAgICBpbnQgKnB1bGxlZF9sZW4pOworCitzdGF0aWMgaW5saW5lIHZvaWQg c2lwX3J4X3BrdF9lbnF1ZXVlKHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBza19idWZmICpz a2IpOworCitzdGF0aWMgdm9pZCBzaXBfdXBkYXRlX3R4X2NyZWRpdHMoc3RydWN0IGVzcF9zaXAg KnNpcCwgdTE2IHJlY3ljbGVkX2NyZWRpdHMpOworCitzdGF0aWMgYm9vbCBzaXBfcnhfcGt0X3By b2Nlc3Moc3RydWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3N0YXRp YyB2b2lkIHNpcF90eF9zdGF0dXNfcmVwb3J0KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBz a19idWZmICpza2IsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywKKwkJ CQkgYm9vbCBzdWNjZXNzKTsKKworc3RhdGljIGJvb2wgY2hlY2tfYWNfdGlkKHU4ICpwa3QsIHU4 IGFjLCB1OCB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoID0gKHN0cnVjdCBpZWVl ODAyMTFfaGRyICopcGt0OworCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gtPmZyYW1l X2NvbnRyb2wpICYmCisJICAgICFpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVfY29udHJvbCkg JiYKKwkgICAgIWllZWU4MDIxMV9pc19jdGwod2gtPmZyYW1lX2NvbnRyb2wpKSB7CisJCWlmICh0 aWQgfHwgYWMgIT0gV01FX0FDX0JFKSB7CisJCQlwcl9pbmZvKCI0NDQgYWM6JXUsIHRpZDoldVxu IiwgYWMsIHRpZCk7CisKKwkJCWlmICh0aWQgPT0gNyAmJiBhYyA9PSBXTUVfQUNfVk8pCisJCQkJ cmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmV0dXJuIHRydWU7CS8vaGFjayB0byBtb2RpZnkgbm9u LXFvcyBudWxsIGRhdGEuCisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBz aXBfcmVjYWxjX2NyZWRpdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qg ZXNwX3NpcCAqc2lwID0gKHN0cnVjdCBlc3Bfc2lwICopZGF0YTsKKworCXNpcF9yZWNhbGNfY3Jl ZGl0X2NsYWltKHNpcCwgMSk7CS8qIHJlY2FsYyBhZ2FpbiAqLworfQorCitzdGF0aWMgdm9pZCBz aXBfcmVjYWxjX2NyZWRpdF9pbml0KHN0cnVjdCBlc3Bfc2lwICpzaXApCit7CisJYXRvbWljX3Nl dCgmc2lwLT5jcmVkaXRfc3RhdHVzLCBSRUNBTENfQ1JFRElUX0RJU0FCTEUpOwkvL3NldCBpdCBk aXNhYmxlCisKKwlzZXR1cF90aW1lcigmc2lwLT5jcmVkaXRfdGltZXIsIHNpcF9yZWNhbGNfY3Jl ZGl0X3RpbWVvdXQsCisJCSAgICAodW5zaWduZWQgbG9uZylzaXApOworfQorCitzdGF0aWMgaW50 IHNpcF9yZWNhbGNfY3JlZGl0X2NsYWltKHN0cnVjdCBlc3Bfc2lwICpzaXAsIGludCBmb3JjZSkK K3sKKwlpbnQgcmV0OworCisJaWYgKGF0b21pY19yZWFkKCZzaXAtPmNyZWRpdF9zdGF0dXMpID09 IFJFQ0FMQ19DUkVESVRfRU5BQkxFICYmICFmb3JjZSkKKwkJcmV0dXJuIDE7CisKKwlhdG9taWNf c2V0KCZzaXAtPmNyZWRpdF9zdGF0dXMsIFJFQ0FMQ19DUkVESVRfRU5BQkxFKTsKKwlyZXQgPSBz aXBfc2VuZF9yZWNhbGNfY3JlZGl0KHNpcC0+ZXB1Yik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KHNpcC0+ZXB1Yi0+ZGV2LCAic2VuZGluZyByZWNhbGMgY3JlZGl0IGZhaWxlZDogJWQiLAorCQkJ cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKnNldHVwIGEgdGltZXIgZm9yIGhhbmRsZSB0 aGUgYWJzX2NyZWRpdCBub3QgcmVjZWl2ZSAqLworCW1vZF90aW1lcigmc2lwLT5jcmVkaXRfdGlt ZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHNpcF9yZWNhbGNfY3JlZGl0X3JlbGVhc2Uoc3RydWN0IGVzcF9zaXAg KnNpcCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+Y3JlZGl0X3N0YXR1cykgPT0gUkVDQUxD X0NSRURJVF9FTkFCTEUpIHsKKwkJYXRvbWljX3NldCgmc2lwLT5jcmVkaXRfc3RhdHVzLCBSRUNB TENfQ1JFRElUX0RJU0FCTEUpOworCQlkZWxfdGltZXJfc3luYygmc2lwLT5jcmVkaXRfdGltZXIp OworCX0gZWxzZSB7CisJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsICJtYXliZSBib2d1cyBjcmVk aXQiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNpcF91cGRhdGVfdHhfY3JlZGl0cyhzdHJ1Y3Qg ZXNwX3NpcCAqc2lwLCB1MTYgcmVjeWNsZWRfY3JlZGl0cykKK3sKKwlpZiAocmVjeWNsZWRfY3Jl ZGl0cyAmIDB4ODAwKSB7CisJCWF0b21pY19zZXQoJnNpcC0+dHhfY3JlZGl0cywgKHJlY3ljbGVk X2NyZWRpdHMgJiAweDdmZikpOworCQlzaXBfcmVjYWxjX2NyZWRpdF9yZWxlYXNlKHNpcCk7CisJ fSBlbHNlIHsKKwkJYXRvbWljX2FkZChyZWN5Y2xlZF9jcmVkaXRzLCAmc2lwLT50eF9jcmVkaXRz KTsKKwl9Cit9CisKK3ZvaWQgc2lwX3RyaWdnZXJfdHhxX3Byb2Nlc3Moc3RydWN0IGVzcF9zaXAg KnNpcCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+dHhfY3JlZGl0cykgPD0gc2lwLT5jcmVk aXRfdG9fcmVzZXJ2ZSArIFNJUF9DVFJMX0NSRURJVF9SRVNFUlZFIHx8CisJICAgIGF0b21pY19y ZWFkKCZzaXAtPmNyZWRpdF9zdGF0dXMpID09IFJFQ0FMQ19DUkVESVRfRU5BQkxFKQorCQlyZXR1 cm47CisKKwlpZiAoc2lwX3F1ZXVlX21heV9yZXN1bWUoc2lwKSkgeworCQkvKiB3YWtldXAgdXBw ZXIgcXVldWUgb25seSBpZiB3ZSBoYXZlIHN1ZmZpY2llbnQgY3JlZGl0cyAqLworCQlhdG9taWNf c2V0KCZzaXAtPmVwdWItPnR4cV9zdG9wcGVkLCBmYWxzZSk7CisJCWllZWU4MDIxMV93YWtlX3F1 ZXVlcyhzaXAtPmVwdWItPmh3KTsKKwl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZzaXAtPmVwdWIt PnR4cV9zdG9wcGVkKSkgeworCQlkZXZfZXJyKHNpcC0+ZXB1Yi0+ZGV2LCAiJXMgY2FuJ3Qgd2Fr ZSB0eHEsIGNyZWRpdHM6ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZzaXAtPnR4 X2NyZWRpdHMpKTsKKwl9CisKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2lwLT5lcHViLT50eHEp KSB7CisJCS8qIHRyeSB0byBzZW5kIG91dCBwa3QgYWxyZWFkeSBpbiBzaXAgcXVldWUgb25jZSB3 ZSBoYXZlIGNyZWRpdHMgKi8KKyNpZiAhZGVmaW5lZChGUEdBX1RYREFUQSkKKwkJaWYgKCFzaWZf Z2V0X2F0ZV9jb25maWcoKSkKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNpcC0+ZXB1Yi0+aHcs CisJCQkJCSAgICAgJnNpcC0+ZXB1Yi0+dHhfd29yayk7CisJCWVsc2UKKwkJCXF1ZXVlX3dvcmso c2lwLT5lcHViLT5lc3Bfd2txLCAmc2lwLT5lcHViLT50eF93b3JrKTsKKyNlbHNlCisJCXF1ZXVl X3dvcmsoc2lwLT5lcHViLT5lc3Bfd2txLCAmc2lwLT5lcHViLT50eF93b3JrKTsKKyNlbmRpZgor CX0KK30KKworc3RhdGljIGJvb2wgc2lwX2FtcGR1X29jY3VweV9idWYoc3RydWN0IGVzcF9zaXAg KnNpcCwKKwkJCQkgc3RydWN0IGVzcF9yeF9hbXBkdV9sZW4gKmFtcGR1X2xlbikKK3sKKwlyZXR1 cm4gKCFhbXBkdV9sZW4tPnN1YnN0YXRlIHx8CisJCWVzcF93bWFjX3J4c2VjX2Vycm9yKGFtcGR1 X2xlbi0+c3Vic3RhdGUpIHx8CisJCShzaXAtPmR1bXBfcnBibV9lcnIgJiYgYW1wZHVfbGVuLT5z dWJzdGF0ZSA9PSBSWF9SUEJNX0VSUikpOworfQorCisvKiBUT0RPOiBIQVJEQ09SRSBDTEVBTlVQ ICovCisKK3N0YXRpYyBib29sIHNpcF9yeF9wa3RfcHJvY2VzcyhzdHJ1Y3QgZXNwX3NpcCAqc2lw LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzaXBfaGRyICpoZHI7CisJc3RydWN0 IHNrX2J1ZmYgKnJza2I7CisJc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqbWFjX2N0cmwsIG5ld19t YWNfY3RybDsKKwlpbnQgcmVtYWluc19sZW4sIGZpcnN0X3BrdF9sZW4sIHJldCA9IDAsIHBrdF9s ZW5fZW5jID0gMCwgYnVmX2xlbiA9IDAsCisJICAgIHB1bGxlZF9sZW4gPSAwLCBwa3RfbnVtOwor CXU4ICpidWZwdHI7CisJYm9vbCB0cmlnZ2VyX3J4cSA9IGZhbHNlLCBoYXZlX3J4YWJvcnQgPSBm YWxzZSwgaGF2ZV9nb29kcGt0ID0gZmFsc2U7CisJc3RydWN0IGVzcF9yeF9hbXBkdV9sZW4gKmFt cGR1X2xlbjsKKwlzdGF0aWMgaW50IHBrdF9kcm9wcGVkLCBwa3RfdG90YWw7CisJc3RhdGljIHU4 IGZyYW1lX2hlYWRbMTZdOworCXN0YXRpYyB1OCBmcmFtZV9idWZfdHRsOworCisJaWYgKCFza2Ip CisJCXJldHVybiB0cmlnZ2VyX3J4cTsKKworCWhkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNrYi0+ ZGF0YTsKKwlidWZwdHIgPSBza2ItPmRhdGE7CisKKwlpZiAoaGRyLT5oX2NyZWRpdHMgJiBTSVBf Q1JFRElUU19NQVNLKQorCQlzaXBfdXBkYXRlX3R4X2NyZWRpdHMoc2lwLCBoZHItPmhfY3JlZGl0 cyAmIFNJUF9DUkVESVRTX01BU0spOworCisJaGRyLT5oX2NyZWRpdHMgJj0gflNJUF9DUkVESVRT X01BU0s7CS8qIGNsZWFuIGNyZWRpdHMgaW4gc2lwX2hkciwgcHJldmVudCBvdmVyLWFkZCAqLwor CisJLyogZmlyc3QgcGt0J3MgbGVuZ3RoIGlzIHN0b3JlZCBpbiAgcmVjeWNsZWRfY3JlZGl0cyBm aXJzdCAyMCBiaXRzCisJICogY29uZmlnIHczIFszMToxMl0KKwkgKiByZXBhaXIgaGRyLT5sZW4g b2YgZmlyc3QgcGt0CisJICovCisJcmVtYWluc19sZW4gPSBoZHItPmxlbjsKKwlmaXJzdF9wa3Rf bGVuID0gaGRyLT5oX2NyZWRpdHMgPj4gMTI7CisJaGRyLT5sZW4gPSBmaXJzdF9wa3RfbGVuOwor CisJaWYgKGZpcnN0X3BrdF9sZW4gPiByZW1haW5zX2xlbikgeworCQlzaXBfcmVjYWxjX2NyZWRp dF9jbGFpbShzaXAsIDApOworCQlzaG93X2J1ZigodTggKiloZHIsIGZpcnN0X3BrdF9sZW4pOwor CQlFU1NFUlQoMCk7CisJCWdvdG8gX2V4aXQ7CisJfQorCisJLyogcGt0cyBoYW5kbGluZywgaW5j bHVkaW5nIHRoZSBmaXJzdCBwa3QsIHNob3VsZCBhbGxvYyBuZXcgc2tiIGZvciBlYWNoIGRhdGEg cGt0LgorCSAqIGZyZWUgdGhlIG9yaWdpbmFsIHdob2xlIHNrYiBhZnRlciBwYXJzaW5nIGlzIGRv bmUuCisJICovCisJd2hpbGUgKHJlbWFpbnNfbGVuKSB7CisJCWlmIChyZW1haW5zX2xlbiA8IHNp emVvZihzdHJ1Y3Qgc2lwX2hkcikpIHsKKwkJCXNpcF9yZWNhbGNfY3JlZGl0X2NsYWltKHNpcCwg MCk7CisJCQlFU1NFUlQoMCk7CisJCQlzaG93X2J1ZigodTggKiloZHIsIDUxMik7CisJCQlnb3Rv IF9leGl0OworCQl9CisKKwkJaGRyID0gKHN0cnVjdCBzaXBfaGRyICopYnVmcHRyOworCQlpZiAo aGRyLT5sZW4gPD0gMCB8fCBoZHItPmxlbiAmIDMpIHsKKwkJCXNpcF9yZWNhbGNfY3JlZGl0X2Ns YWltKHNpcCwgMCk7CisJCQlzaG93X2J1ZigodTggKiloZHIsIDUxMik7CisJCQlFU1NFUlQoMCk7 CisJCQlnb3RvIF9leGl0OworCQl9CisKKwkJaWYgKHVubGlrZWx5KGhkci0+c2VxICE9IHNpcC0+ cnhzZXErKykpIHsKKwkJCXNpcF9yZWNhbGNfY3JlZGl0X2NsYWltKHNpcCwgMCk7CisJCQlkZXZf ZGJnKHNpcC0+ZXB1Yi0+ZGV2LAorCQkJCSIlcyBzZXEgbWlzbWF0Y2ghIGdvdCAldSwgZXhwZWN0 ICV1XG4iLAorCQkJCV9fZnVuY19fLCBoZHItPnNlcSwgc2lwLT5yeHNlcSAtIDEpOworCQkJc2lw LT5yeHNlcSA9IGhkci0+c2VxICsgMTsKKwkJCXNob3dfYnVmKGJ1ZnB0ciwgMzIpOworCQkJRVNT RVJUKDApOworCQl9CisKKwkJaWYgKFNJUF9IRFJfSVNfQ1RSTChoZHIpKSB7CisJCQlTVFJBQ0Vf UlhfRVZFTlRfSU5DKCk7CisKKwkJCXJldCA9IHNpcF9wYXJzZV9ldmVudHMoc2lwLCBidWZwdHIp OworCQkJc2tiX3B1bGwoc2tiLCBoZHItPmxlbik7CisJCX0gZWxzZSBpZiAoU0lQX0hEUl9JU19E QVRBKGhkcikpIHsKKwkJCVNUUkFDRV9SWF9EQVRBX0lOQygpOworCQkJbWFjX2N0cmwgPSBzaXBf cGFyc2Vfbm9ybWFsX21hY19jdHJsKHNrYiwgJnBrdF9sZW5fZW5jLAorCQkJCQkJCSAgICAgJmJ1 Zl9sZW4sCisJCQkJCQkJICAgICAmcHVsbGVkX2xlbik7CisJCQlyc2tiID0gc2lwX3BhcnNlX2Rh dGFfcnhfaW5mbyhzaXAsIHNrYiwgcGt0X2xlbl9lbmMsCisJCQkJCQkgICAgICBidWZfbGVuLCBt YWNfY3RybCwKKwkJCQkJCSAgICAgICZwdWxsZWRfbGVuKTsKKworCQkJaWYgKCFyc2tiKQorCQkJ CWdvdG8gX21vdmVfb247CisKKwkJCWlmIChsaWtlbHkoYXRvbWljX3JlYWQoJnNpcC0+ZXB1Yi0+ d2wub2ZmKSA9PSAwKSkgeworCQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJCQlpZWVlODAyMTFf cngoc2lwLT5lcHViLT5odywgcnNrYik7CisJCQkJbG9jYWxfYmhfZW5hYmxlKCk7CisJCQl9IGVs c2UgeworCQkJCS8qIHN0aWxsIG5lZWQgZ28gdGhybyBwYXJzaW5nIGFzIHNrYl9wdWxsIHNob3Vs ZCBpbnZva2UgKi8KKwkJCQlrZnJlZV9za2IocnNrYik7CisJCQl9CisJCX0gZWxzZSBpZiAoU0lQ X0hEUl9JU19BTVBEVShoZHIpKSB7CisJCQlhbXBkdV9sZW4gPSAoc3RydWN0IGVzcF9yeF9hbXBk dV9sZW4gKikoc2tiLT5kYXRhICsgaGRyLT5sZW4gLyBzaXAtPnJ4X2Jsa3N6ICogc2lwLT5yeF9i bGtzeik7CisJCQlkZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LCAiJXMgcnggYW1wZHUgdG90YWwgbGVu ICV1XG4iLAorCQkJCSAgICBfX2Z1bmNfXywgaGRyLT5sZW4pOworCQkJaWYgKHNrYi0+ZGF0YSAh PSAodTggKiloZHIpIHsKKwkJCQlwcmludGsoIiVwICVwXG4iLCBza2ItPmRhdGEsIGhkcik7CisJ CQkJc2hvd19idWYoc2tiLT5kYXRhLCA1MTIpOworCQkJCXNob3dfYnVmKCh1OCAqKWhkciwgNTEy KTsKKwkJCQlFU1NFUlQoMCk7CisJCQkJZ290byBfZXhpdDsKKwkJCX0KKwkJCW1hY19jdHJsID0g c2lwX3BhcnNlX25vcm1hbF9tYWNfY3RybChza2IsIE5VTEwsIE5VTEwsCisJCQkJCQkJICAgICAm cHVsbGVkX2xlbik7CisJCQltZW1jcHkoJm5ld19tYWNfY3RybCwgbWFjX2N0cmwsCisJCQkgICAg ICAgc2l6ZW9mKHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwpKTsKKwkJCW1hY19jdHJsID0gJm5ld19t YWNfY3RybDsKKwkJCXBrdF9udW0gPSBtYWNfY3RybC0+YW1wZHVfY250OworCQkJZGV2X2RiZyhz aXAtPmVwdWItPmRldiwKKwkJCQkiJXMgJWQgcnggYW1wZHUgJXUgcGt0cywgJWQgcGt0cyBkdW1w ZWQsIGZpcnN0IGxlbiAldVxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sCisJCQkJKHVuc2ln bmVkIGludCkoKGhkci0+bGVuICUgc2lwLT5yeF9ibGtzeikgLworCQkJCQkgICAgICAgc2l6ZW9m KHN0cnVjdCBlc3BfcnhfYW1wZHVfbGVuKSksCisJCQkJcGt0X251bSwgKHVuc2lnbmVkIGludClh bXBkdV9sZW4tPnN1Ymxlbik7CisKKwkJCXBrdF90b3RhbCArPSBtYWNfY3RybC0+YW1wZHVfY250 OworCQkJd2hpbGUgKHBrdF9udW0gPiAwKSB7CisJCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwK KwkJCQkJIiVzICVkIGFtcGR1IHN1YiBzdGF0ZSAlMDJ4LFxuIiwKKwkJCQkJX19mdW5jX18sIF9f TElORV9fLAorCQkJCQlhbXBkdV9sZW4tPnN1YnN0YXRlKTsKKworCQkJCWlmIChzaXBfYW1wZHVf b2NjdXB5X2J1ZihzaXAsIGFtcGR1X2xlbikpIHsJLy9wa3QgaXMgZHVtcGVkCisJCQkJCXJza2Ig PSBzaXBfcGFyc2VfZGF0YV9yeF9pbmZvKHNpcCwgc2tiLAorCQkJCQkJCQkgICAgICBhbXBkdV9s ZW4tPnN1YmxlbiAtIEZDU19MRU4sCisJCQkJCQkJCSAgICAgIDAsCisJCQkJCQkJCSAgICAgIG1h Y19jdHJsLAorCQkJCQkJCQkgICAgICAmcHVsbGVkX2xlbik7CisJCQkJCWlmICghcnNrYikgewor CQkJCQkJRVNTRVJUKDApOworCQkJCQkJZ290byBfZXhpdDsKKwkJCQkJfQorCisJCQkJCWlmIChs aWtlbHkoYXRvbWljX3JlYWQoJnNpcC0+ZXB1Yi0+d2wub2ZmKSA9PSAwKSAmJgorCQkJCQkgICAg KGFtcGR1X2xlbi0+c3Vic3RhdGUgPT0gMCB8fAorCQkJCQkgICAgIGFtcGR1X2xlbi0+c3Vic3Rh dGUgPT0gUlhfVEtJUE1JQ19FUlIgfHwKKwkJCQkJICAgICAoc2lwLT5zZW5kdXBfcnBibV9wa3Qg JiYKKwkJCQkJICAgICAgYW1wZHVfbGVuLT5zdWJzdGF0ZSA9PSBSWF9SUEJNX0VSUikpICYmCisJ CQkJCSAgICAoc2lwLT5yeGFib3J0X2ZpeGVkIHx8CisJCQkJCSAgICAgIWhhdmVfcnhhYm9ydCkp IHsKKwkJCQkJCWlmICghaGF2ZV9nb29kcGt0KSB7CisJCQkJCQkJaGF2ZV9nb29kcGt0ID0gdHJ1 ZTsKKwkJCQkJCQltZW1jcHkoZnJhbWVfaGVhZCwKKwkJCQkJCQkgICAgICAgcnNrYi0+ZGF0YSwK KwkJCQkJCQkgICAgICAgMTYpOworCQkJCQkJCWZyYW1lX2hlYWRbMV0gJj0gfjB4ODA7CisJCQkJ CQkJZnJhbWVfYnVmX3R0bCA9IDM7CisJCQkJCQl9CisJCQkJCQlsb2NhbF9iaF9kaXNhYmxlKCk7 CisJCQkJCQlpZWVlODAyMTFfcngoc2lwLT5lcHViLT5odywKKwkJCQkJCQkgICAgIHJza2IpOwor CQkJCQkJbG9jYWxfYmhfZW5hYmxlKCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlrZnJlZV9za2Io cnNrYik7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoYW1wZHVfbGVuLT5zdWJzdGF0 ZSA9PSBSWF9BQk9SVCkgeworCQkJCQkJdTggKmE7CisJCQkJCQloYXZlX3J4YWJvcnQgPSB0cnVl OworCQkJCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKKwkJCQkJCQkicnggYWJvcnQgJWQgJWRc biIsCisJCQkJCQkJZnJhbWVfYnVmX3R0bCwgcGt0X251bSk7CisJCQkJCQlpZiAoZnJhbWVfYnVm X3R0bCAmJgorCQkJCQkJICAgICFzaXAtPnJ4YWJvcnRfZml4ZWQpIHsKKwkJCQkJCQlzdHJ1Y3Qg ZXNwX3J4X2FtcGR1X2xlbiAqbmV4dF9nb29kX2FtcGR1X2xlbiA9IGFtcGR1X2xlbiArIDE7CisJ CQkJCQkJYSA9IGZyYW1lX2hlYWQ7CisJCQkJCQkJd2hpbGUgKCFzaXBfYW1wZHVfb2NjdXB5X2J1 ZihzaXAsIG5leHRfZ29vZF9hbXBkdV9sZW4pKSB7CisJCQkJCQkJCWlmIChuZXh0X2dvb2RfYW1w ZHVfbGVuID4gYW1wZHVfbGVuICsgcGt0X251bSAtIDEpCisJCQkJCQkJCQlicmVhazsKKwkJCQkJ CQkJbmV4dF9nb29kX2FtcGR1X2xlbisrOworCQkJCQkJCX0KKwkJCQkJCQlpZiAobmV4dF9nb29k X2FtcGR1X2xlbiA8PSBhbXBkdV9sZW4gKyBwa3RfbnVtIC0gMSkgeworCQkJCQkJCQlib29sIGIw LCBiMTAsIGIxMTsKKwkJCQkJCQkJYSA9IHNrYi0+ZGF0YTsKKwkJCQkJCQkJYjAgPSBtZW1jbXAo ZnJhbWVfaGVhZCArIDQsIHNrYi0+ZGF0YSArIDQsIDEyKSA9PSAwOworCQkJCQkJCQliMTAgPSBt ZW1jbXAoZnJhbWVfaGVhZCArIDEwLCBza2ItPmRhdGEsIDYpID09IDA7CisJCQkJCQkJCWIxMSA9 IG1lbWNweShmcmFtZV9oZWFkICsgMTEsIHNrYi0+ZGF0YSwgNSkgPT0gMDsKKwkJCQkJCQkJaWYg KGIwICYmICFiMTAgJiYKKwkJCQkJCQkJICAgICFiMTEpIHsKKwkJCQkJCQkJCWhhdmVfcnhhYm9y dCA9IGZhbHNlOworCQkJCQkJCQl9IGVsc2UgaWYgKCFiMCAmJgorCQkJCQkJCQkJICAgYjEwICYm CisJCQkJCQkJCQkgICAhYjExKSB7CisJCQkJCQkJCQlza2JfcHVzaChza2IsIDEwKTsKKwkJCQkJ CQkJCW1lbWNweShza2ItPmRhdGEsCisJCQkJCQkJCQkgICAgICAgZnJhbWVfaGVhZCwKKwkJCQkJ CQkJCSAgICAgICAxMCk7CisJCQkJCQkJCQloYXZlX3J4YWJvcnQgPSBmYWxzZTsKKwkJCQkJCQkJ CXB1bGxlZF9sZW4gLT0gMTA7CisJCQkJCQkJCX0gZWxzZSBpZiAoIWIwICYmICFiMTAgJiYgYjEx KSB7CisJCQkJCQkJCQlza2JfcHVzaChza2IsIDExKTsKKwkJCQkJCQkJCW1lbWNweShza2ItPmRh dGEsCisJCQkJCQkJCQkgICAgICAgZnJhbWVfaGVhZCwKKwkJCQkJCQkJCSAgICAgICAxMSk7CisJ CQkJCQkJCQloYXZlX3J4YWJvcnQgPSBmYWxzZTsKKwkJCQkJCQkJCXB1bGxlZF9sZW4gLT0gMTE7 CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcGt0X2Ryb3BwZWQr KzsKKwkJCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKKwkJCQkJCSIlcyBhbXBkdSBkcm9wcGVk ICVkLyVkXG4iLAorCQkJCQkJX19mdW5jX18sIHBrdF9kcm9wcGVkLAorCQkJCQkJcGt0X3RvdGFs KTsKKwkJCQl9CisJCQkJcGt0X251bS0tOworCQkJCWFtcGR1X2xlbisrOworCQkJfQorCQkJaWYg KGZyYW1lX2J1Zl90dGwpCisJCQkJZnJhbWVfYnVmX3R0bC0tOworCQkJc2tiX3B1bGwoc2tiLCBo ZHItPmxlbiAtIHB1bGxlZF9sZW4pOworCQl9IGVsc2UgeworCQkJZGV2X2VycihzaXAtPmVwdWIt PmRldiwgInVua25vd24gU0lQIEhEUiB0eXBlXG4iKTsKKwkJfQorCitfbW92ZV9vbjoKKwkJaWYg KGhkci0+bGVuIDwgcmVtYWluc19sZW4pCisJCQlyZW1haW5zX2xlbiAtPSBoZHItPmxlbjsKKwkJ ZWxzZQorCQkJYnJlYWs7CisJCWJ1ZnB0ciArPSBoZHItPmxlbjsKKwl9CisKK19leGl0OgorCWtm cmVlX3NrYihza2IpOworCisJcmV0dXJuIHRyaWdnZXJfcnhxOworfQorCitzdGF0aWMgdm9pZCBf c2lwX3J4cV9wcm9jZXNzKHN0cnVjdCBlc3Bfc2lwICpzaXApCit7CisJc3RydWN0IHNrX2J1ZmYg KnNrYjsKKwlib29sIHNlbmR1cCA9IGZhbHNlOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1 ZSgmc2lwLT5yeHEpKSkKKwkJaWYgKHNpcF9yeF9wa3RfcHJvY2VzcyhzaXAsIHNrYikpCisJCQlz ZW5kdXAgPSB0cnVlOworCisJaWYgKHNlbmR1cCkKKwkJcXVldWVfd29yayhzaXAtPmVwdWItPmVz cF93a3EsICZzaXAtPmVwdWItPnNlbmR1cF93b3JrKTsKKworCS8qIHByb2JhYmx5IHR4X2NyZWRp dCBpcyB1cGRhdGVkLCB0cnkgdHhxICovCisJc2lwX3RyaWdnZXJfdHhxX3Byb2Nlc3Moc2lwKTsK K30KKwordm9pZCBzaXBfcnhxX3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorewor CXN0cnVjdCBlc3Bfc2lwICpzaXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVzcF9zaXAs CisJCQkJCSAgIHJ4X3Byb2Nlc3Nfd29yayk7CisKKwlpZiAoIXNpcCkgeworCQlFU1NFUlQoMCk7 CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUp ID09IFNJUF9TRU5EX0lOSVQpKSB7CisJCXNpcF9zZW5kX2NoaXBfaW5pdChzaXApOworCQlhdG9t aWNfc2V0KCZzaXAtPnN0YXRlLCBTSVBfV0FJVF9CT09UVVApOworCQlyZXR1cm47CisJfQorCisJ bXV0ZXhfbG9jaygmc2lwLT5yeF9tdHgpOworCV9zaXBfcnhxX3Byb2Nlc3Moc2lwKTsKKwltdXRl eF91bmxvY2soJnNpcC0+cnhfbXR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpcF9yeF9w a3RfZW5xdWV1ZShzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorewor CXNrYl9xdWV1ZV90YWlsKCZzaXAtPnJ4cSwgc2tiKTsKK30KKworc3RhdGljIHUzMiBzaXBfcnhf Y291bnQ7CisKK2ludCBzaXBfcngoc3RydWN0IGVzcF9wdWIgKmVwdWIpCit7CisJc3RydWN0IHNp cF9oZHIgKnNoZHI7CisJc3RydWN0IGVzcF9zaXAgKnNpcCA9IGVwdWItPnNpcDsKKwlzdHJ1Y3Qg c2tfYnVmZiAqZmlyc3Rfc2tiLCAqcnhfc2tiOworCXU4ICpyeF9idWY7CisJdTMyIHJ4X2Jsa3N6 LCBmaXJzdF9zejsKKwlpbnQgZXJyOworCXU4IHJhd19zZXE7CisKKwlpZiAobGlrZWx5KHNpZl9n ZXRfYXRlX2NvbmZpZygpICE9IDEpKSB7CisJCXJhd19zZXEgPSBzaWZfZ2V0X3JlZ3MoZXB1Yikt PmludHJfcmF3ICYgMHhmZjsKKworCQlpZiAocmF3X3NlcSAhPSBzaXAtPnRvX2hvc3Rfc2VxKSB7 CisJCQlpZiAocmF3X3NlcSA9PSBzaXAtPnRvX2hvc3Rfc2VxICsgMSkgewkvKiB3aGVuIGxhc3Qg cmVhZCBwa3QgY3JjIGVyciwgdGhpcyBzaXR1YXRpb24gbWF5IG9jY3VyLCBidXQgcmF3X3NlcSBt dXN0bid0IDwgdG9faG9zdF9TZXEgKi8KKwkJCQlzaXAtPnRvX2hvc3Rfc2VxID0gcmF3X3NlcTsK KwkJCQlkZXZfZGJnKGVwdWItPmRldiwKKwkJCQkJIndhcm46IHRvX2hvc3Rfc2VxIHJlZyAweCUw MngsIHNlcSAweCUwMngiLAorCQkJCQlyYXdfc2VxLCBzaXAtPnRvX2hvc3Rfc2VxKTsKKwkJCX0g ZWxzZSB7CisJCQkJZGV2X2VycihlcHViLT5kZXYsCisJCQkJCSJlcnI6IHRvX2hvc3Rfc2VxIHJl ZyAweCUwMngsIHNlcSAweCUwMngiLAorCQkJCQlyYXdfc2VxLCBzaXAtPnRvX2hvc3Rfc2VxKTsK KwkJCQllcnIgPSAwOworCQkJCWdvdG8gX2VycjsKKwkJCX0KKwkJfQorCX0KKworCS8qIGZpcnN0 IHJlYWQgb25lIGJsb2NrIG91dCwgaWYgd2UgbHVjayBlbm91Z2gsIHRoYXQncyBpdAorCSAqCisJ ICogIFRvIG1ha2UgZGVzaWduIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSwgd2UgYWxsb2NhdGUgc2ti KHMpCisJICogIHNlcGFyYXRlbHkgZm9yIGVhY2ggc2lmIHJlYWQgb3BlcmF0aW9uIHRvIGF2b2lk IGdsb2JhbAorCSAqICByZWFkX2J1Zl9wb2ludGUgYWNjZXNzLiAgSXQgY291bGUgYmUgb3B0aW1p emVkIGxhdGUuCisJICovCisKKwlmaXJzdF9zeiA9IHNpZl9nZXRfcmVncyhlcHViKS0+Y29uZmln X3cwOworCXJ4X2Jsa3N6ID0gc2lmX2dldF9ibGtzeihlcHViKTsKKwlmaXJzdF9za2IgPSBfX2Rl dl9hbGxvY19za2Iocm91bmR1cChmaXJzdF9zeiwgcnhfYmxrc3opLCBHRlBfS0VSTkVMKTsKKwor CWlmICghZmlyc3Rfc2tiKSB7CisJCXNpZl91bmxvY2tfYnVzKGVwdWIpOworCQllcnIgPSAwOwor CQlnb3RvIF9lcnI7CisJfQorCisJcnhfYnVmID0gc2tiX3B1dChmaXJzdF9za2IsIGZpcnN0X3N6 KTsKKworCWVyciA9IGVzcF9jb21tb25fcmVhZChlcHViLCByeF9idWYsIGZpcnN0X3N6LCBFU1Bf U0lGX05PU1lOQywgZmFsc2UpOworCXNpcF9yeF9jb3VudCsrOworCWlmICh1bmxpa2VseShlcnIp KSB7CisJCWRldl9lcnIoZXB1Yi0+ZGV2LCAiIGZpcnN0IHJlYWQgZXJyICVkICVkXG4iLCBlcnIs CisJCQlzaWZfZ2V0X3JlZ3MoZXB1YiktPmNvbmZpZ193MCk7CisJCWtmcmVlX3NrYihmaXJzdF9z a2IpOworCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKKwkJZ290byBfZXJyOworCX0KKworCXNoZHIg PSAoc3RydWN0IHNpcF9oZHIgKilyeF9idWY7CisJaWYgKFNJUF9IRFJfSVNfQ1RSTChzaGRyKSAm JiBzaGRyLT5jX2V2dGlkID09IFNJUF9FVlRfU0xFRVApIHsKKwkJYXRvbWljX3NldCgmc2lwLT5l cHViLT5wcy5zdGF0ZSwgRVNQX1BNX09OKTsKKwl9CisKKwlpZiAobGlrZWx5KHNpZl9nZXRfYXRl X2NvbmZpZygpICE9IDEpKQorCQlzaXAtPnRvX2hvc3Rfc2VxKys7CisKKwlpZiAoc2hkci0+bGVu ICYgMykgeworCQlkZXZfZXJyKGVwdWItPmRldiwgInNoZHItPmxlblslZF0gZXJyb3JcbiIsIHNo ZHItPmxlbik7CisJCWtmcmVlX3NrYihmaXJzdF9za2IpOworCQlzaWZfdW5sb2NrX2J1cyhlcHVi KTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBfZXJyOworCX0KKworCWlmIChzaGRyLT5sZW4gIT0g Zmlyc3Rfc3opIHsKKwkJZGV2X2VycihlcHViLT5kZXYsICJzaGRyLT5sZW5bJWRdICBmaXJzdF9z aXplWyVkXSBlcnJvclxuIiwKKwkJCXNoZHItPmxlbiwgZmlyc3Rfc3opOworCQlrZnJlZV9za2Io Zmlyc3Rfc2tiKTsKKwkJc2lmX3VubG9ja19idXMoZXB1Yik7CisJCWVyciA9IC1FSU87CisJCWdv dG8gX2VycjsKKwl9IGVsc2UgeworCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKKwkJc2tiX3RyaW0o Zmlyc3Rfc2tiLCBzaGRyLT5sZW4pOworCQlkZXZfZGJnKGVwdWItPmRldiwgImZpcnN0X3NrYiBv bmx5XG4iKTsKKworCQlyeF9za2IgPSBmaXJzdF9za2I7CisJfQorCisJaWYgKGF0b21pY19yZWFk KCZzaXAtPnN0YXRlKSA9PSBTSVBfU1RPUCkgeworCQlrZnJlZV9za2Iocnhfc2tiKTsKKwkJZGV2 X2VycihlcHViLT5kZXYsICJyeCBwYWNrZXQgd2hpbGUgc2lwIHN0b3BwZWRcbiIpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlzaXBfcnhfcGt0X2VucXVldWUoc2lwLCByeF9za2IpOworCXF1ZXVlX3dv cmsoc2lwLT5lcHViLT5lc3Bfd2txLCAmc2lwLT5yeF9wcm9jZXNzX3dvcmspOworCitfZXJyOgor CXJldHVybiBlcnI7Cit9CisKK2ludCBzaXBfcG9zdF9pbml0KHN0cnVjdCBlc3Bfc2lwICpzaXAs IHN0cnVjdCBzaXBfZXZ0X2Jvb3R1cDIgKmJldnQpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWI7 CisJdTggbWFjX2lkID0gYmV2dC0+bWFjX2FkZHJbMF07CisJaW50IG1hY19pbmRleCA9IDAsIGk7 CisKKwlpZiAoIXNpcCkgeworCQlFU1NFUlQoMCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWVwdWIgPSBzaXAtPmVwdWI7CisKKwlzaXAtPnR4X2FnZ3Jfd3JpdGVfcHRyID0gc2lwLT50eF9h Z2dyX2J1ZjsKKwlzaXAtPnR4X2Jsa3N6ID0gYmV2dC0+dHhfYmxrc3o7CisJc2lwLT5yeF9ibGtz eiA9IGJldnQtPnJ4X2Jsa3N6OworCXNpcC0+Y3JlZGl0X3RvX3Jlc2VydmUgPSBiZXZ0LT5jcmVk aXRfdG9fcmVzZXJ2ZTsKKwlzaXAtPmR1bXBfcnBibV9lcnIgPSBiZXZ0LT5vcHRpb25zICYgU0lQ X0RVTVBfUlBCTV9FUlI7CisJc2lwLT5yeGFib3J0X2ZpeGVkID0gYmV2dC0+b3B0aW9ucyAmIFNJ UF9SWEFCT1JUX0ZJWEVEOworCXNpcC0+c3VwcG9ydF9iZ3NjYW4gPSBiZXZ0LT5vcHRpb25zICYg U0lQX1NVUFBPUlRfQkdTQ0FOOworCXNpcC0+c2VuZHVwX3JwYm1fcGt0ID0gMDsKKworCS8qIHBy aW50IG91dCBNQUMgYWRkci4uLiAqLworCW1lbWNweShlcHViLT5tYWNfYWRkciwgYmV2dC0+bWFj X2FkZHIsIEVUSF9BTEVOKTsKKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IHNpemVvZihlc3BfbWFj X3ByZWZpeF90YWJsZSkgLyBzaXplb2Yoc3RydWN0IGVzcF9tYWNfcHJlZml4KTsKKwkgICAgIGkr KykKKwkJaWYgKGVzcF9tYWNfcHJlZml4X3RhYmxlW2ldLm1hY19pbmRleCA9PSBtYWNfaWQpIHsK KwkJCW1hY19pbmRleCA9IGk7CisJCQlicmVhazsKKwkJfQorCisJZXB1Yi0+bWFjX2FkZHJbMF0g PSBlc3BfbWFjX3ByZWZpeF90YWJsZVttYWNfaW5kZXhdLm1hY19hZGRyX3ByZWZpeFswXTsKKwll cHViLT5tYWNfYWRkclsxXSA9IGVzcF9tYWNfcHJlZml4X3RhYmxlW21hY19pbmRleF0ubWFjX2Fk ZHJfcHJlZml4WzFdOworCWVwdWItPm1hY19hZGRyWzJdID0gZXNwX21hY19wcmVmaXhfdGFibGVb bWFjX2luZGV4XS5tYWNfYWRkcl9wcmVmaXhbMl07CisKKwlhdG9taWNfc2V0KCZzaXAtPm5vaXNl X2Zsb29yLCBiZXZ0LT5ub2lzZV9mbG9vcik7CisKKwlzaXBfcmVjYWxjX2NyZWRpdF9pbml0KHNp cCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogd3JpdGUgcGt0cyBpbiBhZ2dyIGJ1ZiB0byB0YXJn ZXQgbWVtb3J5ICovCitzdGF0aWMgdm9pZCBzaXBfd3JpdGVfcGt0cyhzdHJ1Y3QgZXNwX3NpcCAq c2lwLCBpbnQgcG1fc3RhdGUpCit7CisJaW50IHR4X2FnZ3JfbGVuLCBlcnI7CisJc3RydWN0IHNp cF9oZHIgKmZpcnN0X3NoZHI7CisKKwl0eF9hZ2dyX2xlbiA9IHNpcC0+dHhfYWdncl93cml0ZV9w dHIgLSBzaXAtPnR4X2FnZ3JfYnVmOworCWlmICh0eF9hZ2dyX2xlbiA8IHNpemVvZihzdHJ1Y3Qg c2lwX2hkcikpIHsKKwkJZGV2X2VycihzaXAtPmVwdWItPmRldiwgIlt0eF9hZ2dyX2xlbl0gJWQg PCBzaXplb2Yoc2lwX2hkcilcbiIsCisJCQl0eF9hZ2dyX2xlbik7CisJCUVTU0VSVCgwKTsKKwkJ cmV0dXJuOworCX0KKworCWlmICh0eF9hZ2dyX2xlbiAmIDB4MykgeworCQlFU1NFUlQoMCk7CisJ CXJldHVybjsKKwl9CisKKwlmaXJzdF9zaGRyID0gKHN0cnVjdCBzaXBfaGRyICopc2lwLT50eF9h Z2dyX2J1ZjsKKworCWlmIChhdG9taWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSA8PSBTSVBfQ1JF RElUU19MT1dfVEhSRVNIT0xEKQorCQlmaXJzdF9zaGRyLT5mY1sxXSB8PSBTSVBfSERSX0ZfTkVF RF9DUkRUX1JQVDsKKworCS8qIHN0aWxsIHVzZSBsb2NrIGJ1cyBpbnN0ZWFkIG9mIHNpZl9sbGRl c2Nfd3JpdGVfc3luYyBzaW5jZSB3ZSB3YW50IHRvIHByb3RlY3Qgc2V2ZXJhbCBnbG9iYWwgdmFy aWJsZXMgYXNzaWdubWVudHMgKi8KKwlzaWZfbG9ja19idXMoc2lwLT5lcHViKTsKKworCWVyciA9 IGVzcF9jb21tb25fd3JpdGUoc2lwLT5lcHViLCBzaXAtPnR4X2FnZ3JfYnVmLCB0eF9hZ2dyX2xl biwKKwkJCSAgICAgICBFU1BfU0lGX05PU1lOQyk7CisJaWYgKGVycikKKwkJZGV2X2VycihzaXAt PmVwdWItPmRldiwgImVycm9yIHdoaWxlIHdyaXRpbmcgcGt0czogJWRcbiIsIGVycik7CisKKwlz aXAtPnR4X2FnZ3Jfd3JpdGVfcHRyID0gc2lwLT50eF9hZ2dyX2J1ZjsKKwlzaXAtPnR4X3RvdF9s ZW4gPSAwOworCisJc2lmX3VubG9ja19idXMoc2lwLT5lcHViKTsKK30KKworLyogc2V0dXAgc2lw IGhlYWRlciBhbmQgdHggaW5mbywgY29weSBwa3QgaW50byBhZ2dyIGJ1ZiAqLworc3RhdGljIGlu dCBzaXBfcGFja19wa3Qoc3RydWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwg aW50ICpwbV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKml0eF9pbmZvOwor CXN0cnVjdCBzaXBfaGRyICpzaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwlzdHJ1 Y3QgZXNwX3ZpZiAqZXZpZjsKKwlzdHJ1Y3QgZXNwX25vZGUgKm5vZGU7CisJdTMyIHR4X2xlbiwg b2Zmc2V0OworCWJvb2wgaXNfZGF0YSA9IHRydWU7CisJdTggc3RhX2luZGV4OworCWludCBhbGc7 CisKKwlpdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpZiAoaXR4X2luZm8tPmZs YWdzID09IDB4ZmZmZmZmZmYpIHsKKwkJc2hkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNrYi0+ZGF0 YTsKKwkJaXNfZGF0YSA9IGZhbHNlOworCQl0eF9sZW4gPSBza2ItPmxlbjsKKwl9IGVsc2Ugewor CQl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwkJZXZpZiA9IChzdHJ1 Y3QgZXNwX3ZpZiAqKWl0eF9pbmZvLT5jb250cm9sLnZpZi0+ZHJ2X3ByaXY7CisJCS8qIHVwZGF0 ZSBzaXAgaGVhZGVyICovCisJCXNoZHIgPSAoc3RydWN0IHNpcF9oZHIgKilzaXAtPnR4X2FnZ3Jf d3JpdGVfcHRyOworCisJCXNoZHItPmZjWzBdID0gMDsKKwkJc2hkci0+ZmNbMV0gPSAwOworCisJ CWlmIChpdHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQkJU0lQX0hE Ul9TRVRfVFlQRShzaGRyLT5mY1swXSwgU0lQX0RBVEFfQU1QRFUpOworCQllbHNlCisJCQlTSVBf SERSX1NFVF9UWVBFKHNoZHItPmZjWzBdLCBTSVBfREFUQSk7CisKKwkJaWYgKCFldmlmLT5lcHVi KSB7CisJCQlzaXBfdHhfc3RhdHVzX3JlcG9ydChzaXAsIHNrYiwgaXR4X2luZm8sIGZhbHNlKTsK KwkJCWF0b21pY19kZWMoJnNpcC0+dHhfZGF0YV9wa3RfcXVldWVkKTsKKwkJCXJldHVybiAtRUlO VkFMOworCQl9CisKKwkJLyogbWFrZSByb29tIGZvciBlbmNyeXB0ZWQgcGt0ICovCisJCWlmIChp dHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJCWFsZyA9IGVzcF9jaXBoZXIyYWxnKGl0eF9p bmZvLT5jb250cm9sLmh3X2tleS0+Y2lwaGVyKTsKKwkJCWlmICh1bmxpa2VseShhbGcgPT0gLTEp KSB7CisJCQkJc2lwX3R4X3N0YXR1c19yZXBvcnQoc2lwLCBza2IsIGl0eF9pbmZvLCBmYWxzZSk7 CisJCQkJYXRvbWljX2RlYygmc2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpOworCQkJCXJldHVybiAt MTsKKwkJCX0KKworCQkJc2hkci0+ZF9lbmNfZmxhZyA9IGFsZyArIDE7CisJCQlzaGRyLT5kX2h3 X2tpZCA9IGl0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCB8CisJCQkJKGV2aWYt PmluZGV4IDw8IDcpOworCQl9IGVsc2UgeworCQkJc2hkci0+ZF9lbmNfZmxhZyA9IDA7CisJCQlz aGRyLT5kX2h3X2tpZCA9IGV2aWYtPmluZGV4IDw8IDcgfCBldmlmLT5pbmRleDsKKwkJfQorCisJ CS8qIHVwZGF0ZSBzaXAgdHggaW5mbyAqLworCQlub2RlID0gZXNwX2dldF9ub2RlX2J5X2FkZHIo c2lwLT5lcHViLCB3aC0+YWRkcjEpOworCQlpZiAobm9kZSkKKwkJCXN0YV9pbmRleCA9IG5vZGUt PmluZGV4OworCQllbHNlCisJCQlzdGFfaW5kZXggPSBFU1BfUFVCX01BWF9TVEEgKyAxOworCisJ CVNJUF9IRFJfU0VUX0lGSURYKHNoZHItPmZjWzBdLCBldmlmLT5pbmRleCA8PCAzIHwgc3RhX2lu ZGV4KTsKKwkJc2hkci0+ZF9wMnAgPSBpdHhfaW5mby0+Y29udHJvbC52aWYtPnAycDsKKworCQlp ZiAoZXZpZi0+aW5kZXggPT0gMSkKKwkJCXNoZHItPmRfcDJwID0gMTsKKworCQlzaGRyLT5kX2Fj ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJCXNoZHItPmRfdGlkID0gc2tiLT5wcmlv cml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0s7CisKKwkJd2ggPSAoc3RydWN0IGll ZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwkJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5m cmFtZV9jb250cm9sKSkgeworCQkJLyogYWRkYmEvZGVsYmEvYmFyIG1heSB1c2UgZGlmZmVyZW50 IHRpZC9hYyAqLworCQkJaWYgKHNoZHItPmRfYWMgPT0gV01FX0FDX1ZPKQorCQkJCXNoZHItPmRf dGlkID0gNzsKKworCQkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24od2gtPmZyYW1lX2NvbnRyb2wp KSB7CisJCQkJc2hkci0+ZF90aWQgPSA4OworCQkJCXNoZHItPmRfYWMgPSA0OworCQkJfQorCQl9 CisKKwkJaWYgKGNoZWNrX2FjX3RpZChza2ItPmRhdGEsIHNoZHItPmRfYWMsIHNoZHItPmRfdGlk KSkgeworCQkJc2hkci0+ZF9hYyA9IFdNRV9BQ19CRTsKKwkJCXNoZHItPmRfdGlkID0gMDsKKwkJ fQorCisJCS8qIG1ha2Ugc3VyZSBkYXRhIGlzIHN0YXJ0IGF0IDQgYnl0ZXMgYWxpZ25lZCBhZGRy LiAqLworCQlvZmZzZXQgPSByb3VuZHVwKHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksIDQpOworCisJ CWlmIChTSVBfSERSX0lTX0FNUERVKHNoZHIpKSB7CisJCQltZW1zZXQoc2lwLT50eF9hZ2dyX3dy aXRlX3B0ciArIG9mZnNldCwgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGVzcF90eF9hbXBk dV9lbnRyeSkpOworCQkJb2Zmc2V0ICs9IHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCBlc3BfdHhfYW1w ZHVfZW50cnkpLCA0KTsKKwkJfQorCisJCXR4X2xlbiA9IG9mZnNldCArIHNrYi0+bGVuOworCQlz aGRyLT5sZW4gPSB0eF9sZW47CS8qIGFjdHVhbCBsZW4gKi8KKwl9CisKKwlzaGRyLT5zZXEgPSBz aXAtPnR4c2VxKys7CisKKwkvKiBjb3B5IHNrYiB0byBhZ2dyIGJ1ZiAqLworCW1lbWNweShzaXAt PnR4X2FnZ3Jfd3JpdGVfcHRyICsgb2Zmc2V0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWlm IChpc19kYXRhKSB7CisJCXNwaW5fbG9ja19iaCgmc2lwLT5lcHViLT50eF9sb2NrKTsKKwkJc2lw LT50eGRhdGFzZXEgPSBzaGRyLT5zZXE7CisJCXNwaW5fdW5sb2NrX2JoKCZzaXAtPmVwdWItPnR4 X2xvY2spOworCisJCS8qIGZha2UgYSB0eF9zdGF0dXMgYW5kIHJlcG9ydCB0byBtYWM4MDIxMSBz dGFjayB0byBzcGVlZCB1cCB0eCwgbWF5IGFmZmVjdAorCQkgKiAgMSkgcmF0ZSBjb250cm9sIChu b3cgaXQncyBhbGwgaW4gdGFyZ2V0LCBzbyBzaG91bGQgYmUgT0spCisJCSAqICAyKSBwcyBtb2Rl LCBtYWM4MDIxMSB3YW50IHRvIGNoZWNrIEFDSyBvZiBwcy9udWxsZGF0YSB0byBzZWUgaWYgQVAg aXMgYXdha2UKKwkJICogIDMpIEJBUiwgbWFjODAyMTEgZG8gQkFSIGJ5IGNoZWNraW5nIEFDSwor CQkgKgorCQkgKiAgWFhYOiBuZWVkIHRvIGFkanVzdCBmb3IgMTFuLCBlLmcuIHJlcG9ydCB0eF9z dGF0dXMgYWNjb3JkaW5nIHRvIEJBIHJlY2VpdmVkIGluIHRhcmdldAorCQkgKi8KKwkJc2lwX3R4 X3N0YXR1c19yZXBvcnQoc2lwLCBza2IsIGl0eF9pbmZvLCB0cnVlKTsKKwkJYXRvbWljX2RlYygm c2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpOworCisJCVNUUkFDRV9UWF9EQVRBX0lOQygpOworCX0g ZWxzZSB7CisJCS8qIGNoZWNrIHBtIHN0YXRlIGhlcmUgKi8KKworCQkvKiBubyBuZWVkIHRvIGhv bGQgY3RybCBza2IgKi8KKwkJc2lwX2ZyZWVfY3RybF9za2J1ZmYoc2lwLCBza2IpOworCQlTVFJB Q0VfVFhfQ01EX0lOQygpOworCX0KKworCS8qIFRCRDogcm91bmR1cCBoZXJlIG9yIHdob2xlIGFn Z3ItYnVmICovCisJdHhfbGVuID0gcm91bmR1cCh0eF9sZW4sIHNpcC0+dHhfYmxrc3opOworCisJ c2lwLT50eF9hZ2dyX3dyaXRlX3B0ciArPSB0eF9sZW47CisJc2lwLT50eF90b3RfbGVuICs9IHR4 X2xlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXBfdHhfc3RhdHVzX3JlcG9y dChzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3Qg aWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8sCisJCQkJIGJvb2wgc3VjY2VzcykKK3sKKwlzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqd2g7CisJc3RydWN0IGVzcF9ub2RlICpub2RlOworCXN0cnVjdCBl c3BfdHhfdGlkICp0aWQ7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwl1OCB0aWRubzsK KworCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpIHsKKwkJ aWYgKGxpa2VseShzdWNjZXNzKSkKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9T VEFUX0FDSzsKKwkJZWxzZQorCQkJdHhfaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9TVEFU X0FDSzsKKworCQkvKiBtYW5pcHVsYXRlIHJhdGUgc3RhdHVzLi4uICovCisJCXR4X2luZm8tPnN0 YXR1cy5yYXRlc1swXS5pZHggPSAxMTsKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50 ID0gMTsKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzID0gMDsKKwkJdHhfaW5mby0+ c3RhdHVzLnJhdGVzWzFdLmlkeCA9IC0xOworCX0gZWxzZSB7CisJCXR4X2luZm8tPmZsYWdzIHw9 IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVIHwKKwkJCUlFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJ dHhfaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IDE7CisJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9h Y2tfbGVuID0gMTsKKworCQkvKiBtYW5pcHVsYXRlIHJhdGUgc3RhdHVzLi4uICovCisJCXR4X2lu Zm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSA3OworCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0u Y291bnQgPSAxOworCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgPSBJRUVFODAyMTFf VFhfUkNfTUNTIHwKKwkJCUlFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsKKwkJdHhfaW5mby0+c3Rh dHVzLnJhdGVzWzFdLmlkeCA9IC0xOworCX0KKworCWlmICghbW9kX3N1cHBvcnRfbm9fdHhhbXBk dSgpICYmCisJICAgIGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJnNpcC0+ZXB1Yi0+aHctPmNv bmYuY2hhbmRlZikgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7CisJCXdoID0gKHN0cnVjdCBpZWVl ODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gt PmZyYW1lX2NvbnRyb2wpICYmCisJCSAgICAhKElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3Mg JiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkgeworCQkJdGlkbm8gPSBpZWVlODAyMTFfZ2V0X3Fv c19jdGwod2gpWzBdICYKKwkJCQlJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKworCQkJbm9k ZSA9IGVzcF9nZXRfbm9kZV9ieV9hZGRyKHNpcC0+ZXB1Yiwgd2gtPmFkZHIxKTsKKwkJCWlmICgh bm9kZSB8fCAhbm9kZS0+c3RhKQorCQkJCWdvdG8gX2V4aXQ7CisKKwkJCXN0YSA9IG5vZGUtPnN0 YTsKKwkJCXRpZCA9ICZub2RlLT50aWRbdGlkbm9dOworCQkJaWYgKCF0aWQpIHsKKwkJCQlFU1NF UlQoMCk7CisJCQkJZ290byBfZXhpdDsKKwkJCX0KKworCQkJc3Bpbl9sb2NrX2JoKCZzaXAtPmVw dWItPnR4X2FtcGR1X2xvY2spOworCisJCQlpZiAodGlkLT5zdGF0ZSA9PSBFU1BfVElEX1NUQVRF X0lOSVQgJiYKKwkJCSAgICBUSURfVE9fQUModGlkbm8pICE9IFdNRV9BQ19WTyAmJiB0aWQtPmNu dCA+PSAxMCkgeworCQkJCXRpZC0+c3RhdGUgPSBFU1BfVElEX1NUQVRFX1RSSUdHRVI7CisJCQkJ ZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKKwkJCQkJInN0YXJ0IHR4IGJhIHNlc3Npb24sYWRkcjol cE0sdGlkOiV1XG4iLAorCQkJCQl3aC0+YWRkcjEsIHRpZG5vKTsKKwkJCQlzcGluX3VubG9ja19i aCgmc2lwLT5lcHViLT50eF9hbXBkdV9sb2NrKTsKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFf c2Vzc2lvbihzdGEsIHRpZG5vLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHRpZC0+c3RhdGUg PT0gRVNQX1RJRF9TVEFURV9JTklUKQorCQkJCQl0aWQtPmNudCsrOworCQkJCWVsc2UKKwkJCQkJ dGlkLT5jbnQgPSAwOworCisJCQkJc3Bpbl91bmxvY2tfYmgoJnNpcC0+ZXB1Yi0+dHhfYW1wZHVf bG9jayk7CisJCQl9CisJCX0KKwl9CisKK19leGl0OgorCWllZWU4MDIxMV90eF9zdGF0dXMoc2lw LT5lcHViLT5odywgc2tiKTsKK30KKworLyogIE5COiB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGxv Y2tlZCB3aGVuIGNhbGxpbmcKKyAqLwordm9pZCBzaXBfdHhxX3Byb2Nlc3Moc3RydWN0IGVzcF9w dWIgKmVwdWIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2lwX2hkciAqaGRy OworCXN0cnVjdCBlc3Bfc2lwICpzaXAgPSBlcHViLT5zaXA7CisJc3RydWN0IGllZWU4MDIxMV90 eF9pbmZvICppdHhfaW5mbzsKKwl1MzIgcGt0X2xlbiwgdHhfbGVuID0gMDsKKwlpbnQgYmxrbnVt ID0gMCwgcG1fc3RhdGUgPSAwOworCWJvb2wgcXVldWVkX2JhY2sgPSBmYWxzZSwgb3V0X29mX2Ny ZWRpdHMgPSBmYWxzZTsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVwdWItPnR4cSkp KSB7CisJCS8qIGNtZCBza2ItPmxlbiBkb2VzIG5vdCBpbmNsdWRlIHNpcF9oZHIgdG9vICovCisJ CXBrdF9sZW4gPSBza2ItPmxlbjsKKwkJaXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7 CisJCWlmIChpdHhfaW5mby0+ZmxhZ3MgIT0gMHhmZmZmZmZmZikgeworCQkJcGt0X2xlbiArPSBy b3VuZHVwKHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksIDQpOworCQkJaWYgKGl0eF9pbmZvLT5mbGFn cyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQkJcGt0X2xlbiArPSByb3VuZHVwKHNpemVv ZihzdHJ1Y3QgZXNwX3R4X2FtcGR1X2VudHJ5KSwKKwkJCQkJCSAgIDQpOworCQl9CisKKwkJLyog Y3VycmVudCBkZXNpZ24gc2ltcGx5IHJlcXVpcmVzIGV2ZXJ5IHNpcF9oZHIgbXVzdCBiZSBhdCB0 aGUgYmVnaW4gb2YgbWJsaywgdGhhdCBkZWZpbml0ZWx5CisJCSAqIG5lZWQgdG8gYmUgb3B0aW1p emVkLCBlLmcuIGNhbGN1bGF0ZSByZW1haW4gbGVuZ3RoIGluIHRoZSBwcmV2aW91cyBtYmxrLCBp ZiBpdCBsYXJnZXIgdGhhbgorCQkgKiBjZXJ0YWluIHRocmVzaG9sZCAoZS5nLCB3aG9sZSBwa3Qg b3IgPiA1MCUgb2YgcGt0IG9yIDIgeCBzaXplb2Yoc3RydWN0IHNpcF9oZHIpLCBhcHBlbmQgcGt0 CisJCSAqIHRvIHRoZSBwcmV2aW91cyBtYmxrLiAgVGhpcyBtaWdodCBiZSBkb25lIGluIHNpcF9w YWNrX3BrdCgpCisJCSAqLworCQlwa3RfbGVuID0gcm91bmR1cChwa3RfbGVuLCBzaXAtPnR4X2Js a3N6KTsKKwkJYmxrbnVtID0gcGt0X2xlbiAvIHNpcC0+dHhfYmxrc3o7CisKKwkJLyoKKwkJICog RklYTUU6IEVtcGlyaWNhbCBkZWxheS4gV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgY29ubmVjdGlv biB0bworCQkgKiBhIFdpRmkgbmV0d29yayBjcmFzaGVzIHRoZSBrZXJuZWwgKHNvbWV0aW1lcyBh dCB0aGUgc2Vjb25kCisJCSAqIGNvbm5lY3Rpb24pLgorCQkgKi8KKwkJdWRlbGF5KDIwMDApOwor CisJCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmc2lwLT5jcmVkaXRfc3RhdHVzKSA9PSBSRUNB TENfQ1JFRElUX0VOQUJMRSkpIHsJLyogbmVlZCByZWNhbGMgY3JlZGl0ICovCisJCQloZHIgPSAo c3RydWN0IHNpcF9oZHIgKilza2ItPmRhdGE7CisJCQlpdHhfaW5mbyA9IElFRUU4MDIxMV9TS0Jf Q0Ioc2tiKTsKKworCQkJaWYgKCEoaXR4X2luZm8tPmZsYWdzID09IDB4ZmZmZmZmZmYgJiYKKwkJ CSAgICAgIFNJUF9IRFJfR0VUX1RZUEUoaGRyLT5mY1swXSkgPT0gU0lQX0NUUkwgJiYKKwkJCSAg ICAgIGhkci0+Y19jbWRpZCA9PSBTSVBfQ01EX1JFQ0FMQ19DUkVESVQgJiYKKwkJCSAgICAgIGJs a251bSA8PSBhdG9taWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSAtIHNpcC0+Y3JlZGl0X3RvX3Jl c2VydmUpKSB7CS8qIGV4Y2VwdCBjbWQgcmVjYWxjIGNyZWRpdCAqLworCQkJCWRldl9kYmcoZXB1 Yi0+ZGV2LCAicmVjYWxjIGNyZWRpdHMhXG4iKTsKKwkJCQlTVFJBQ0VfVFhfT1VUX09GX0NSRURJ VF9JTkMoKTsKKwkJCQlxdWV1ZWRfYmFjayA9IHRydWU7CisJCQkJb3V0X29mX2NyZWRpdHMgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHVubGlrZWx5KGJsa251 bSA+IChhdG9taWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSAtIHNpcC0+Y3JlZGl0X3RvX3Jlc2Vy dmUgLSBTSVBfQ1RSTF9DUkVESVRfUkVTRVJWRSkpKSB7CisJCQkJaXR4X2luZm8gPSBJRUVFODAy MTFfU0tCX0NCKHNrYik7CisJCQkJaWYgKGl0eF9pbmZvLT5mbGFncyA9PSAweGZmZmZmZmZmKSB7 CS8qIHByaXYgY3RybCBwa3QgKi8KKwkJCQkJaWYgKGJsa251bSA+IGF0b21pY19yZWFkKCZzaXAt PnR4X2NyZWRpdHMpIC0gc2lwLT5jcmVkaXRfdG9fcmVzZXJ2ZSkgeworCQkJCQkJZGV2X2RiZyhl cHViLT5kZXYsCisJCQkJCQkJIiVzIGNtZCBwa3Qgb3V0IG9mIGNyZWRpdHMhXG4iLAorCQkJCQkJ CV9fZnVuY19fKTsKKwkJCQkJCVNUUkFDRV9UWF9PVVRfT0ZfQ1JFRElUX0lOQygpOworCQkJCQkJ cXVldWVkX2JhY2sgPSB0cnVlOworCQkJCQkJb3V0X29mX2NyZWRpdHMgPSB0cnVlOworCQkJCQkJ YnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkZXZfZGJnKGVwdWItPmRldiwKKwkJ CQkJCSIlcyBvdXQgb2YgY3JlZGl0cyFcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCVNUUkFD RV9UWF9PVVRfT0ZfQ1JFRElUX0lOQygpOworCQkJCQlxdWV1ZWRfYmFjayA9IHRydWU7CisJCQkJ CW91dF9vZl9jcmVkaXRzID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisK KwkJdHhfbGVuICs9IHBrdF9sZW47CisJCWlmICh0eF9sZW4gPj0gU0lQX1RYX0FHR1JfQlVGX1NJ WkUpIHsKKwkJCS8qIGRvIHdlIG5lZWQgdG8gaGF2ZSBsaW1pdGF0aW9uIGxpa2VtYXggOCBwa3Rz IGluIGEgcm93PyAqLworCQkJZGV2X2RiZyhlcHViLT5kZXYsICIlcyB0b28gbXVjaCBwa3RzIGlu IG9uZSBzaG90IVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlTVFJBQ0VfVFhfT05FX1NIT1RfSU5D KCk7CisJCQl0eF9sZW4gLT0gcGt0X2xlbjsKKwkJCXF1ZXVlZF9iYWNrID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKHNpcF9wYWNrX3BrdChzaXAsIHNrYiwgJnBtX3N0YXRlKSAhPSAw KSB7CisJCQkvKiB3cm9uZyBwa3QsIHdvbid0IHNlbmQgdG8gdGFyZ2V0ICovCisJCQl0eF9sZW4g LT0gcGt0X2xlbjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXRvbWljX3N1YihibGtudW0sICZz aXAtPnR4X2NyZWRpdHMpOworCQkvKgorCQkgKiBGSVhNRTogRW1waXJpY2FsIGRlbGF5LiBXaXRo b3V0IHRoaXMgZGVsYXksIHRoZSBjb25uZWN0aW9uIHRvCisJCSAqIGEgV2lGaSBuZXR3b3JrIGNy YXNoZXMgdGhlIGtlcm5lbCAoc29tZXRpbWVzIGF0IHRoZSBzZWNvbmQKKwkJICogY29ubmVjdGlv bikuCisJCSAqLworCQl1ZGVsYXkoMjAwMCk7CisKKwl9CisKKwlpZiAocXVldWVkX2JhY2spCisJ CXNrYl9xdWV1ZV9oZWFkKCZlcHViLT50eHEsIHNrYik7CisKKwlpZiAoYXRvbWljX3JlYWQoJnNp cC0+c3RhdGUpID09IFNJUF9TVE9QCisjaWZkZWYgSE9TVF9SRVNFVF9CVUcKKwkgICAgfHwgYXRv bWljX3JlYWQoJmVwdWItPndsLm9mZikgPT0gMQorI2VuZGlmCisJICAgKSB7CisJCXF1ZXVlZF9i YWNrID0gMTsKKwkJdHhfbGVuID0gMDsKKwl9CisKKwlpZiAodHhfbGVuKQorCQlzaXBfd3JpdGVf cGt0cyhzaXAsIHBtX3N0YXRlKTsKKworCWlmIChxdWV1ZWRfYmFjayAmJiAhb3V0X29mX2NyZWRp dHMpCisJCS8qIHNrYiBwZW5kaW5nLCBkbyBhc3luYyBwcm9jZXNzIGFnYWluICovCisJCXNpcF90 cmlnZ2VyX3R4cV9wcm9jZXNzKHNpcCk7Cit9CisKKyNpZm5kZWYgTk9fV01NX0RVTU1ZCitzdGF0 aWMgc3RydWN0IGVzcF84MDIxMV93bW1fcGFyYW1fZWxlbWVudCBlc3Bfd21tX3BhcmFtID0gewor CS5vdWkgPSB7MHgwMCwgMHg1MCwgMHhmMn0sCisJLm91aV90eXBlID0gMHgwMiwKKwkub3VpX3N1 YnR5cGUgPSAweDAxLAorCS52ZXJzaW9uID0gMHgwMSwKKwkucW9zX2luZm8gPSAweDAwLAorCS5y ZXNlcnZlZCA9IDB4MDAsCisJLmFjID0geworCQl7CisJCQkuYWNpX2FpZnNuID0gMHgwMywKKwkJ CS5jdyA9IDB4YTQsCisJCQkudHhvcF9saW1pdCA9IDB4MDAwMCwKKwkJfSwKKwkJeworCQkJLmFj aV9haWZzbiA9IDB4MjcsCisJCQkuY3cgPSAweGE0LAorCQkJLnR4b3BfbGltaXQgPSAweDAwMDAs CisJCX0sCisJCXsKKwkJCS5hY2lfYWlmc24gPSAweDQyLAorCQkJLmN3ID0gMHg0MywKKwkJCS50 eG9wX2xpbWl0ID0gMHgwMDVlLAorCQl9LAorCQl7CisJCQkuYWNpX2FpZnNuID0gMHg2MiwKKwkJ CS5jdyA9IDB4MzIsCisJCQkudHhvcF9saW1pdCA9IDB4MDAyZiwKKwkJfSwKKwl9LAorfTsKKwor c3RhdGljIGludCBlc3BfYWRkX3dtbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXU4ICpwOwor CWludCBmbGFnID0gMDsKKwlpbnQgcmVtYWluX2xlbjsKKwlpbnQgYmFzZV9sZW47CisJaW50IGxl bjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIg KndoOworCisJaWYgKCFza2IpCisJCXJldHVybiAtMTsKKworCXdoID0gKHN0cnVjdCBpZWVlODAy MTFfaGRyICopc2tiLT5kYXRhOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopKCh1 OCAqKXNrYi0+ZGF0YSk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3Aod2gtPmZyYW1l X2NvbnRyb2wpKSB7CisJCXAgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7CisJCWJhc2Vf bGVuID0gKHU4ICopbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlIC0gKHU4ICopbWdtdDsKKwl9 IGVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3Aod2gtPmZyYW1lX2NvbnRyb2wpKSB7 CisJCXAgPSBtZ210LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZTsKKwkJYmFzZV9sZW4gPSAodTgg KiltZ210LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZSAtICh1OCAqKW1nbXQ7CisJfSBlbHNlIGlm IChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCh3aC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJcCA9IG1n bXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZTsKKwkJYmFzZV9sZW4gPSAodTggKiltZ210LT51LnBy b2JlX3Jlc3AudmFyaWFibGUgLSAodTggKiltZ210OworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lz X2JlYWNvbih3aC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJcCA9IG1nbXQtPnUuYmVhY29uLnZhcmlh YmxlOworCQliYXNlX2xlbiA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICop bWdtdDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9CisKKwlyZW1haW5fbGVuID0gc2tiLT5s ZW4gLSBiYXNlX2xlbjsKKworCXdoaWxlIChyZW1haW5fbGVuID4gMCkgeworCQlpZiAoKnAgPT0g MHhkZCAmJiAqKHAgKyA1KSA9PSAweDAyKQkvL3dtbSB0eXBlCisJCQlyZXR1cm4gMDsKKwkJZWxz ZSBpZiAoKnAgPT0gMHgyZCkJLy9oYXMgaHQgY2FwCisJCQlmbGFnID0gMTsKKworCQlsZW4gPSAq KCsrcCk7CisJCXAgKz0gKGxlbiArIDEpOworCQlyZW1haW5fbGVuIC09IChsZW4gKyAyKTsKKwl9 CisKKwlpZiAocmVtYWluX2xlbiA8IDApCisJCXJldHVybiAtMjsKKworCWlmIChmbGFnID09IDEp IHsKKwkJc2tiX3B1dChza2IsIDIgKyBzaXplb2YoZXNwX3dtbV9wYXJhbSkpOworCisJCW1lbXNl dChwLCAweGRkLCBzaXplb2YodTgpKTsKKwkJbWVtc2V0KHAgKyAxLCBzaXplb2YoZXNwX3dtbV9w YXJhbSksIHNpemVvZih1OCkpOworCQltZW1jcHkocCArIDIsICZlc3Bfd21tX3BhcmFtLCBzaXpl b2YoZXNwX3dtbV9wYXJhbSkpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCQkJCS8qIE5P X1dNTV9EVU1NWSAqLworCisvKiAgcGFyc2UgbWFjX3J4X2N0cmwgYW5kIHJldHVybiBsZW5ndGgg Ki8KK3N0YXRpYyBpbnQgc2lwX3BhcnNlX21hY19yeF9pbmZvKHN0cnVjdCBlc3Bfc2lwICpzaXAs CisJCQkJIHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwgKm1hY19jdHJsLAorCQkJCSBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJ c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisK KwlyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwlyeF9zdGF0dXMtPmZyZXEg PSBlc3BfaWVlZTJtaHoobWFjX2N0cmwtPmNoYW5uZWwpOworCXJ4X3N0YXR1cy0+c2lnbmFsID0g bWFjX2N0cmwtPnJzc2kgKyBtYWNfY3RybC0+bm9pc2VfZmxvb3I7CS8qIHNuciBhY3R1YWxseSwg bmVlZCB0byBvZmZzZXQgbm9pc2UgZmxvb3IgZS5nLiAtODUgKi8KKworCWhkciA9IChzdHJ1Y3Qg aWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpZiAobWFjX2N0cmwtPmRhbWF0Y2gwID09IDEg JiYgbWFjX2N0cmwtPmJzc2lkbWF0Y2gwID09IDEgJiYJLyptYXRjaCBic3NpZCBhbmQgZGEsIGJ1 dCBiZWFjb24gcGFja2FnZSBjb250YWluIG90aGVyIGJzc2lkICovCisJICAgICFzdHJuY21wKGhk ci0+YWRkcjIsIHNpcC0+ZXB1Yi0+d2wuYnNzaWQsIEVUSF9BTEVOKSkgewkvKiBmb3JjZSBtYXRj aCBhZGRyMiAqLworCQlpZiAoKytzaWduYWxfbG9vcCA+PSBTSUdOQUxfQ09VTlQpIHsKKwkJCWF2 Z19zaWduYWwgKz0gcnhfc3RhdHVzLT5zaWduYWw7CisJCQlhdmdfc2lnbmFsIC89IFNJR05BTF9D T1VOVDsKKwkJCXJ4X3N0YXR1cy0+c2lnbmFsID0gYXZnX3NpZ25hbCArIDU7CisJCQlvbGRfc2ln bmFsID0gcnhfc3RhdHVzLT5zaWduYWw7CisJCQlzaWduYWxfbG9vcCA9IDA7CisJCQlhdmdfc2ln bmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCWF2Z19zaWduYWwgKz0gcnhfc3RhdHVzLT5zaWduYWw7 CisJCQlyeF9zdGF0dXMtPnNpZ25hbCA9IG9sZF9zaWduYWw7CisJCX0KKwl9CisKKwlyeF9zdGF0 dXMtPmFudGVubmEgPSAwOwkvKiBvbmUgYW50ZW5uYSBmb3Igbm93ICovCisJcnhfc3RhdHVzLT5i YW5kID0gTkw4MDIxMV9CQU5EXzJHSFo7CisJcnhfc3RhdHVzLT5mbGFnID0gUlhfRkxBR19ERUNS WVBURUQgfCBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7CisJaWYgKG1hY19jdHJsLT5zaWdfbW9kZSkg eworCQlyeF9zdGF0dXMtPmVuY29kaW5nIHw9IFJYX0VOQ19IVDsKKwkJcnhfc3RhdHVzLT5yYXRl X2lkeCA9IG1hY19jdHJsLT5NQ1M7CisJCWlmIChtYWNfY3RybC0+U0dJKQorCQkJcnhfc3RhdHVz LT5lbmNfZmxhZ3MgfD0gUlhfRU5DX0ZMQUdfU0hPUlRfR0k7CisJfSBlbHNlIHsKKwkJcnhfc3Rh dHVzLT5yYXRlX2lkeCA9IGVzcF93bWFjX3JhdGUyaWR4KG1hY19jdHJsLT5yYXRlKTsKKwl9CisK KwlpZiAobWFjX2N0cmwtPnJ4ZW5kX3N0YXRlID09IFJYX0ZDU19FUlIpCisJCXJ4X3N0YXR1cy0+ ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisJLyogTWljIGVycm9yIGZyYW1lIGZs YWcgKi8KKwlpZiAobWFjX2N0cmwtPnJ4ZW5kX3N0YXRlID09IFJYX1RLSVBNSUNfRVJSIHx8CisJ ICAgIG1hY19jdHJsLT5yeGVuZF9zdGF0ZSA9PSBSWF9DQ01QTUlDX0VSUikgeworCQlpZiAoYXRv bWljX3JlYWQoJnNpcC0+ZXB1Yi0+d2wudGtpcF9rZXlfc2V0KSA9PSAxKSB7CisJCQlyeF9zdGF0 dXMtPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCQkJYXRvbWljX3NldCgmc2lwLT5lcHVi LT53bC50a2lwX2tleV9zZXQsIDApOworCQkJcHJpbnRrKCJtaWMgZXJyXG4iKTsKKwkJfSBlbHNl IHsKKwkJCXByaW50aygibWljIGVyciBkaXNjYXJkXG4iKTsKKwkJfQorCX0KKworCXdoID0gKHN0 cnVjdCBpZWVlODAyMTFfaGRyICopKCh1OCAqKXNrYi0+ZGF0YSk7CisKKyNpZm5kZWYgTk9fV01N X0RVTU1ZCisJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5mcmFtZV9jb250cm9sKSkKKwkJZXNw X2FkZF93bW0oc2tiKTsKKyNlbmRpZgorCisJLyogc29tZSBrZXJuZWwgZS5nLiAzLjAuOCB3cm9u Z2x5IGhhbmRsZXMgbm9uLWVuY3J5cHRlZCBwa3QgbGlrZSBlYXBvbCAqLworCWlmIChpZWVlODAy MTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfaGFzX3By b3RlY3RlZCh3aC0+ZnJhbWVfY29udHJvbCkpCisJCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxB R19JVl9TVFJJUFBFRDsKKwkJZWxzZSBpZiAoIWF0b21pY19yZWFkKCZzaXAtPmVwdWItPndsLnB0 a19jbnQpKQorCQkJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqc2lwX3Bh cnNlX25vcm1hbF9tYWNfY3RybChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJCSBpbnQgKnBr dF9sZW5fZW5jLAorCQkJCQkJCSBpbnQgKmJ1Zl9sZW4sCisJCQkJCQkJIGludCAqcHVsbGVkX2xl bikKK3sKKwlzdHJ1Y3Qgc2lwX2hkciAqaGRyID0gKHN0cnVjdCBzaXBfaGRyICopc2tiLT5kYXRh OworCXN0cnVjdCBlc3BfbWFjX3J4X2N0cmwgKm1hY19jdHJsOworCWludCBsZW5faW5faGRyID0g aGRyLT5sZW47CisKKwlFU1NFUlQoc2tiKTsKKwlFU1NFUlQoc2tiLT5sZW4gPiBTSVBfTUlOX0RB VEFfUEtUX0xFTik7CisKKwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOwor CSpwdWxsZWRfbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2lwX2hkcik7CisJbWFjX2N0cmwgPSAoc3Ry dWN0IGVzcF9tYWNfcnhfY3RybCAqKXNrYi0+ZGF0YTsKKwlpZiAoIW1hY19jdHJsLT5hZ2dyZWdh dGlvbikgeworCQlFU1NFUlQocGt0X2xlbl9lbmMpOworCQlFU1NFUlQoYnVmX2xlbik7CisJCSpw a3RfbGVuX2VuYyA9IChtYWNfY3RybC0+c2lnX21vZGUgPyBtYWNfY3RybC0+SFRfbGVuZ3RoIDog bWFjX2N0cmwtPmxlZ2FjeV9sZW5ndGgpIC0gRkNTX0xFTjsKKwkJKmJ1Zl9sZW4gPSBsZW5faW5f aGRyIC0gc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSAtCisJCQlzaXplb2Yoc3RydWN0IGVzcF9tYWNf cnhfY3RybCk7CisJfQorCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGVzcF9tYWNfcnhf Y3RybCkpOworCSpwdWxsZWRfbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX21hY19yeF9jdHJsKTsK KworCXJldHVybiBtYWNfY3RybDsKK30KKworLyogZm9yIG9uZSBNUERVIChpbmNsdWRpbmcgc3Vi ZnJhbWUgaW4gQU1QRFUpICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNpcF9wYXJzZV9kYXRh X3J4X2luZm8oc3RydWN0IGVzcF9zaXAgKnNpcCwKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYg KnNrYiwKKwkJCQkJICAgICAgaW50IHBrdF9sZW5fZW5jLCBpbnQgYnVmX2xlbiwKKwkJCQkJICAg ICAgc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqbWFjX2N0cmwsCisJCQkJCSAgICAgIGludCAqcHVs bGVkX2xlbikKK3sKKwkvKiAgIHwgbWFjX3J4X2N0cmwgfCByZWFsX2RhdGFfcGF5bG9hZCB8IGFt cGR1X2VudHJpZXMgfCAqLworCXN0cnVjdCBza19idWZmICpyc2tiOworCXN0cnVjdCBpZWVlODAy MTFfaGRyICp3aDsKKwlpbnQgcGt0X2xlbiwgcmV0OworCisJaWYgKG1hY19jdHJsLT5hZ2dyZWdh dGlvbikgeworCQl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwkJcGt0 X2xlbiA9IHBrdF9sZW5fZW5jOworCQlpZiAoaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQod2gtPmZy YW1lX2NvbnRyb2wpKQkvL2FtcGR1LCBpdCBpcyBDQ01QIGVuYworCQkJcGt0X2xlbiAtPSA4Owor CisJCWJ1Zl9sZW4gPSByb3VuZHVwKHBrdF9sZW4sIDQpOworCX0gZWxzZSB7CisJCXBrdF9sZW4g PSBidWZfbGVuIC0gMyArICgocGt0X2xlbl9lbmMgLSAxKSAmIDB4Myk7CisJfQorCisjaWZuZGVm IE5PX1dNTV9EVU1NWQorCXJza2IgPSBfX2Rldl9hbGxvY19za2IocGt0X2xlbl9lbmMgKyBzaXpl b2YoZXNwX3dtbV9wYXJhbSkgKyAyLAorCQkJICAgICAgIEdGUF9BVE9NSUMpOworI2Vsc2UKKwly c2tiID0gX19kZXZfYWxsb2Nfc2tiKHBrdF9sZW5fZW5jLCBHRlBfQVRPTUlDKTsKKyNlbmRpZgkJ CQkvKiBOT19XTU1fRFVNTVkgKi8KKwlpZiAodW5saWtlbHkoIXJza2IpKSB7CisJCWRldl9lcnIo c2lwLT5lcHViLT5kZXYsICJubyBtZW0gZm9yIHJza2JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlza2JfcHV0KHJza2IsIHBrdF9sZW5fZW5jKTsKKworCW1lbWNweShyc2tiLT5kYXRhLCBz a2ItPmRhdGEsIHBrdF9sZW4pOworCisJaWYgKHBrdF9sZW5fZW5jID4gcGt0X2xlbikKKwkJbWVt c2V0KHJza2ItPmRhdGEgKyBwa3RfbGVuLCAwLCBwa3RfbGVuX2VuYyAtIHBrdF9sZW4pOworCisJ Lyogc3RyaXAgb3V0IGN1cnJlbnQgcGt0LCBtb3ZlIHRvIHRoZSBuZXh0IG9uZSAqLworCXNrYl9w dWxsKHNrYiwgYnVmX2xlbik7CisJKnB1bGxlZF9sZW4gKz0gYnVmX2xlbjsKKworCXJldCA9IHNp cF9wYXJzZV9tYWNfcnhfaW5mbyhzaXAsIG1hY19jdHJsLCByc2tiKTsKKwlpZiAocmV0ID09IC0x ICYmICFtYWNfY3RybC0+YWdncmVnYXRpb24pIHsKKwkJa2ZyZWVfc2tiKHJza2IpOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcnNrYjsKK30KKworc3RydWN0IGVzcF9zaXAgKnNpcF9h dHRhY2goc3RydWN0IGVzcF9wdWIgKmVwdWIpCit7CisJc3RydWN0IGVzcF9zaXAgKnNpcDsKKwlz dHJ1Y3Qgc2lwX3BrdCAqcGt0OworCWludCBpLCBwbzsKKworCXNpcCA9IGt6YWxsb2Moc2l6ZW9m KCpzaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNpcCkgeworCQlkZXZfZGJnKGVwdWItPmRldiwg Im5vIG1lbSBmb3Igc2lwIVxuIik7CisJCWdvdG8gX2Vycl9zaXA7CisJfQorCisJLyogRmluZGlu ZyB0aGUgc21hbGVzdCBhdmFpbGFibGUgc3BhY2UgdG8gYWxsb2NhdGUgdGhpcyB2YXJpYXZsZSAq LworCXBvID0gZ2V0X29yZGVyKFNJUF9UWF9BR0dSX0JVRl9TSVpFKTsKKworCXNpcC0+dHhfYWdn cl9idWYgPSAodTggKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIHBvKTsKKwlpZiAoIXNp cC0+dHhfYWdncl9idWYpIHsKKwkJZGV2X2VycihlcHViLT5kZXYsICJubyBtZW0gZm9yIHR4X2Fn Z3JfYnVmIVxuIik7CisJCWdvdG8gX2Vycl9hZ2dyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZz aXAtPmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnNpcC0+ZnJlZV9jdHJsX3R4YnVmKTsKKwlJ TklUX0xJU1RfSEVBRCgmc2lwLT5mcmVlX2N0cmxfcnhidWYpOworCisJZm9yIChpID0gMDsgaSA8 IFNJUF9DVFJMX0JVRl9OOyBpKyspIHsKKwkJcGt0ID0ga3phbGxvYyhzaXplb2YoKnBrdCksIEdG UF9LRVJORUwpOworCQlpZiAoIXBrdCkKKwkJCWdvdG8gX2Vycl9wa3Q7CisKKwkJcGt0LT5idWZf YmVnaW4gPSBremFsbG9jKFNJUF9DVFJMX0JVRl9TWiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGt0 LT5idWZfYmVnaW4pIHsKKwkJCWtmcmVlKHBrdCk7CisJCQlwa3QgPSBOVUxMOworCQkJZ290byBf ZXJyX3BrdDsKKwkJfQorCisJCXBrdC0+YnVmX2xlbiA9IFNJUF9DVFJMX0JVRl9TWjsKKwkJcGt0 LT5idWYgPSBwa3QtPmJ1Zl9iZWdpbjsKKworCQlpZiAoaSA8IFNJUF9DVFJMX1RYQlVGX04pCisJ CQlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsICZzaXAtPmZyZWVfY3RybF90eGJ1Zik7CisJCWVs c2UKKwkJCWxpc3RfYWRkX3RhaWwoJnBrdC0+bGlzdCwgJnNpcC0+ZnJlZV9jdHJsX3J4YnVmKTsK Kwl9CisKKwltdXRleF9pbml0KCZzaXAtPnJ4X210eCk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgm c2lwLT5yeHEpOworCUlOSVRfV09SSygmc2lwLT5yeF9wcm9jZXNzX3dvcmssIHNpcF9yeHFfcHJv Y2Vzcyk7CisKKwlzaXAtPmVwdWIgPSBlcHViOworCWF0b21pY19zZXQoJnNpcC0+bm9pc2VfZmxv b3IsIC05Nik7CisKKwlhdG9taWNfc2V0KCZzaXAtPnN0YXRlLCBTSVBfSU5JVCk7CisJYXRvbWlj X3NldCgmc2lwLT50eF9jcmVkaXRzLCAwKTsKKworCWlmICghc2lwLT5yYXdidWYpIHsKKwkJc2lw LT5yYXdidWYgPSBremFsbG9jKFNJUF9CT09UX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYg KCFzaXAtPnJhd2J1ZikgeworCQkJZGV2X2VycihlcHViLT5kZXYsICJubyBtZW0gZm9yIHJhd2J1 ZiFcbiIpOworCQkJZ290byBfZXJyX3BrdDsKKwkJfQorCX0KKworCWF0b21pY19zZXQoJnNpcC0+ c3RhdGUsIFNJUF9QUkVQQVJFX0JPT1QpOworCisJcmV0dXJuIHNpcDsKKworX2Vycl9wa3Q6CisJ c2lwX2ZyZWVfaW5pdF9jdHJsX2J1ZihzaXApOworCisJaWYgKHNpcC0+dHhfYWdncl9idWYpIHsK KwkJcG8gPSBnZXRfb3JkZXIoU0lQX1RYX0FHR1JfQlVGX1NJWkUpOworCQlmcmVlX3BhZ2VzKCh1 bnNpZ25lZCBsb25nKXNpcC0+dHhfYWdncl9idWYsIHBvKTsKKwkJc2lwLT50eF9hZ2dyX2J1ZiA9 IE5VTEw7CisJfQorCitfZXJyX2FnZ3I6CisJa2ZyZWUoc2lwKTsKKwlzaXAgPSBOVUxMOworCitf ZXJyX3NpcDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2lwX2ZyZWVfaW5pdF9j dHJsX2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwKQoreworCXN0cnVjdCBzaXBfcGt0ICpwa3QsICp0 cGt0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdHBrdCwgJnNpcC0+ZnJlZV9j dHJsX3R4YnVmLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZwa3QtPmxpc3QpOworCQlrZnJlZShwa3Qt PmJ1Zl9iZWdpbik7CisJCWtmcmVlKHBrdCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHBrdCwgdHBrdCwgJnNpcC0+ZnJlZV9jdHJsX3J4YnVmLCBsaXN0KSB7CisJCWxpc3RfZGVs KCZwa3QtPmxpc3QpOworCQlrZnJlZShwa3QtPmJ1Zl9iZWdpbik7CisJCWtmcmVlKHBrdCk7CisJ fQorfQorCit2b2lkIHNpcF9kZXRhY2goc3RydWN0IGVzcF9zaXAgKnNpcCkKK3sKKwlpZiAoIXNp cCkKKwkJcmV0dXJuOworCisJc2lwX2ZyZWVfaW5pdF9jdHJsX2J1ZihzaXApOworCisJaWYgKGF0 b21pY19yZWFkKCZzaXAtPnN0YXRlKSA9PSBTSVBfUlVOKSB7CisJCXNpZl9kaXNhYmxlX3Rhcmdl dF9pbnRlcnJ1cHQoc2lwLT5lcHViKTsKKworCQlhdG9taWNfc2V0KCZzaXAtPnN0YXRlLCBTSVBf U1RPUCk7CisKKwkJLyogZGlzYWJsZSBpcnEgaGVyZSAqLworCQlzaWZfZGlzYWJsZV9pcnEoc2lw LT5lcHViKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2lwLT5yeF9wcm9jZXNzX3dvcmspOworCisJ CXNrYl9xdWV1ZV9wdXJnZSgmc2lwLT5yeHEpOworCQltdXRleF9kZXN0cm95KCZzaXAtPnJ4X210 eCk7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNpcC0+ZXB1Yi0+c2VuZHVwX3dvcmspOworCQlza2Jf cXVldWVfcHVyZ2UoJnNpcC0+ZXB1Yi0+cnhxKTsKKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0 KEVTUF9XTF9GTEFHX0hXX1JFR0lTVEVSRUQsCisJCQkJICAgICAgICZzaXAtPmVwdWItPndsLmZs YWdzKSkKKwkJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHNpcC0+ZXB1Yi0+aHcpOworCisJCS8q IGNhbmNlbCBhbGwgd29ya2VyL3RpbWVyICovCisJCWNhbmNlbF93b3JrX3N5bmMoJnNpcC0+ZXB1 Yi0+dHhfd29yayk7CisJCXNrYl9xdWV1ZV9wdXJnZSgmc2lwLT5lcHViLT50eHEpOworCQlza2Jf cXVldWVfcHVyZ2UoJnNpcC0+ZXB1Yi0+dHhkb25lcSk7CisKKwkJZnJlZV9wYWdlcygodW5zaWdu ZWQgbG9uZylzaXAtPnR4X2FnZ3JfYnVmLAorCQkJICAgZ2V0X29yZGVyKFNJUF9UWF9BR0dSX0JV Rl9TSVpFKSk7CisJCXNpcC0+dHhfYWdncl9idWYgPSBOVUxMOworCisJCWF0b21pY19zZXQoJnNp cC0+c3RhdGUsIFNJUF9JTklUKTsKKwl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZzaXAtPnN0YXRl KSA+PSBTSVBfQk9PVCAmJgorCQkgICBhdG9taWNfcmVhZCgmc2lwLT5zdGF0ZSkgPD0gU0lQX1dB SVRfQk9PVFVQKSB7CisJCXNpZl9kaXNhYmxlX3RhcmdldF9pbnRlcnJ1cHQoc2lwLT5lcHViKTsK KwkJYXRvbWljX3NldCgmc2lwLT5zdGF0ZSwgU0lQX1NUT1ApOworCQlzaWZfZGlzYWJsZV9pcnEo c2lwLT5lcHViKTsKKwkJa2ZyZWUoc2lwLT5yYXdidWYpOworCisJCWlmIChhdG9taWNfcmVhZCgm c2lwLT5zdGF0ZSkgPT0gU0lQX1NFTkRfSU5JVCkgeworCQkJY2FuY2VsX3dvcmtfc3luYygmc2lw LT5yeF9wcm9jZXNzX3dvcmspOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzaXAtPnJ4cSk7CisJCQlt dXRleF9kZXN0cm95KCZzaXAtPnJ4X210eCk7CisJCQljYW5jZWxfd29ya19zeW5jKCZzaXAtPmVw dWItPnNlbmR1cF93b3JrKTsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2lwLT5lcHViLT5yeHEpOwor CQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFU1BfV0xfRkxBR19IV19SRUdJU1RFUkVE LAorCQkJCSAgICAgICAmc2lwLT5lcHViLT53bC5mbGFncykpCisJCQlpZWVlODAyMTFfdW5yZWdp c3Rlcl9odyhzaXAtPmVwdWItPmh3KTsKKwkJYXRvbWljX3NldCgmc2lwLT5zdGF0ZSwgU0lQX0lO SVQpOworCX0gZWxzZSB7CisJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJ3cm9uZyBzdGF0ZSAo JWQpIGZvciBkZXRhY2hpbmcgc2lwXG4iLAorCQkJYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUpKTsK Kwl9CisKKwlrZnJlZShzaXApOworfQorCitpbnQgc2lwX3dyaXRlX21lbW9yeShzdHJ1Y3QgZXNw X3NpcCAqc2lwLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKK3sKKwlzdHJ1Y3Qgc2lwX2Nt ZF93cml0ZV9tZW1vcnkgKmNtZDsKKwlzdHJ1Y3Qgc2lwX2hkciAqY2hkcjsKKwl1MTYgcmVtYWlu cywgaGRycywgYnVmc2l6ZTsKKwl1MzIgbG9hZGFkZHI7CisJdTggKnNyYzsKKwlpbnQgZXJyID0g MDsKKwl1MzIgKnQ7CisKKwlpZiAoIXNpcCB8fCAhc2lwLT5yYXdidWYpIHsKKwkJRVNTRVJUKHNp cCk7CisJCUVTU0VSVChzaXAtPnJhd2J1Zik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1l bXNldChzaXAtPnJhd2J1ZiwgMCwgU0lQX0JPT1RfQlVGX1NJWkUpOworCisJY2hkciA9IChzdHJ1 Y3Qgc2lwX2hkciAqKXNpcC0+cmF3YnVmOworCVNJUF9IRFJfU0VUX1RZUEUoY2hkci0+ZmNbMF0s IFNJUF9DVFJMKTsKKwljaGRyLT5jX2NtZGlkID0gU0lQX0NNRF9XUklURV9NRU1PUlk7CisKKwly ZW1haW5zID0gbGVuOworCWhkcnMgPSBzaXplb2Yoc3RydWN0IHNpcF9oZHIpICsgc2l6ZW9mKHN0 cnVjdCBzaXBfY21kX3dyaXRlX21lbW9yeSk7CisKKwl3aGlsZSAocmVtYWlucykgeworCQlzcmMg PSAmYnVmW2xlbiAtIHJlbWFpbnNdOworCQlsb2FkYWRkciA9IGFkZHIgKyAobGVuIC0gcmVtYWlu cyk7CisKKwkJaWYgKHJlbWFpbnMgPCAoU0lQX0JPT1RfQlVGX1NJWkUgLSBoZHJzKSkgeworCQkJ LyogYWxpZ25lZCB3aXRoIDQgYnl0ZXMgKi8KKwkJCWJ1ZnNpemUgPSByb3VuZHVwKHJlbWFpbnMs IDQpOworCQkJbWVtc2V0KHNpcC0+cmF3YnVmICsgaGRycywgMCwgYnVmc2l6ZSk7CisJCQlyZW1h aW5zID0gMDsKKwkJfSBlbHNlIHsKKwkJCWJ1ZnNpemUgPSBTSVBfQk9PVF9CVUZfU0laRSAtIGhk cnM7CisJCQlyZW1haW5zIC09IGJ1ZnNpemU7CisJCX0KKworCQljaGRyLT5sZW4gPSBidWZzaXpl ICsgaGRyczsKKwkJY2hkci0+c2VxID0gc2lwLT50eHNlcSsrOworCQljbWQgPSAoc3RydWN0IHNp cF9jbWRfd3JpdGVfbWVtb3J5ICopKHNpcC0+cmF3YnVmICsgU0lQX0NUUkxfSERSX0xFTik7CisJ CWNtZC0+bGVuID0gYnVmc2l6ZTsKKwkJY21kLT5hZGRyID0gbG9hZGFkZHI7CisJCW1lbWNweShz aXAtPnJhd2J1ZiArIGhkcnMsIHNyYywgYnVmc2l6ZSk7CisKKwkJdCA9ICh1MzIgKilzaXAtPnJh d2J1ZjsKKwkJZXJyID0gZXNwX2NvbW1vbl93cml0ZShzaXAtPmVwdWIsIHNpcC0+cmF3YnVmLCBj aGRyLT5sZW4sCisJCQkJICAgICAgIEVTUF9TSUZfU1lOQyk7CisJCWlmIChlcnIpIHsKKwkJCWRl dl9lcnIoc2lwLT5lcHViLT5kZXYsICJzZW5kIGJ1ZmZlciBmYWlsZWRcbiIpOworCQkJcmV0dXJu IGVycjsKKwkJfQorCQkvLyAxbXMgaXMgZW5vdWdoLCBpbiBmYWN0IG9uIGRlbGwtZDQzMCwgbmVl ZCBub3QgZGVsYXkgYXQgYWxsLgorCQltZGVsYXkoMSk7CisJfQorCisJcmV0dXJuIGVycjsKK30K KworaW50IHNpcF9zZW5kX2NtZChzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBpbnQgY2lkLCB1MzIgY21k bGVuLCB2b2lkICpjbWQpCit7CisJc3RydWN0IHNpcF9oZHIgKmNoZHI7CisJc3RydWN0IHNpcF9w a3QgKnBrdDsKKwlpbnQgcmV0OworCisJcGt0ID0gc2lwX2dldF9jdHJsX2J1ZihzaXAsIFNJUF9U WF9DVFJMX0JVRik7CisJaWYgKCFwa3QpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hkciA9IChz dHJ1Y3Qgc2lwX2hkciAqKXBrdC0+YnVmX2JlZ2luOworCWNoZHItPmxlbiA9IFNJUF9DVFJMX0hE Ul9MRU4gKyBjbWRsZW47CisJY2hkci0+c2VxID0gc2lwLT50eHNlcSsrOworCWNoZHItPmNfY21k aWQgPSBjaWQ7CisKKwlpZiAoY21kKSB7CisJCW1lbXNldChwa3QtPmJ1ZiwgMCwgY21kbGVuKTsK KwkJbWVtY3B5KHBrdC0+YnVmLCAodTggKiljbWQsIGNtZGxlbik7CisJfQorCisJcmV0ID0gZXNw X2NvbW1vbl93cml0ZShzaXAtPmVwdWIsIHBrdC0+YnVmX2JlZ2luLCBjaGRyLT5sZW4sCisJCQkg ICAgICAgRVNQX1NJRl9TWU5DKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHNpcC0+ZXB1Yi0+ZGV2 LCAic2VuZCBjbWQgJWQgZmFpbGVkXG4iLCBjaWQpOworCisJc2lwX3JlY2xhaW1fY3RybF9idWYo c2lwLCBwa3QsIFNJUF9UWF9DVFJMX0JVRik7CisKKwkvKiAgSGFjayBoZXJlOiByZXNldCB0eC9y eCBzZXEgYmVmb3JlIHRhcmdldCByYW0gY29kZSBpcyB1cC4uLiAqLworCWlmIChjaWQgPT0gU0lQ X0NNRF9CT09UVVApIHsKKwkJc2lwLT5yeHNlcSA9IDA7CisJCXNpcC0+dHhzZXEgPSAwOworCQlz aXAtPnR4ZGF0YXNlcSA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHNrX2J1 ZmYgKnNpcF9hbGxvY19jdHJsX3NrYnVmKHN0cnVjdCBlc3Bfc2lwICpzaXAsIHUxNiBsZW4sIHUz MiBjaWQpCit7CisJc3RydWN0IHNpcF9oZHIgKnNpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5m byAqdGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCUVTU0VSVChsZW4gPD0gc2lwLT50eF9i bGtzeik7CisKKwkvKiBubyBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIG5ldCBzdGFjayAqLwor CXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJ CWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJubyBza2IgZm9yIGN0cmwhXG4iKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJc2tiLT5sZW4gPSBsZW47CisKKwl0aSA9IElFRUU4MDIxMV9TS0JfQ0Io c2tiKTsKKwkvKiBzZXQgdHhfaW5mbyBmbGFncyB0byAweGZmZmZmZmZmIHRvIGluZGljYXRlIHNp cF9jdHJsIHBrdCAqLworCXRpLT5mbGFncyA9IDB4ZmZmZmZmZmY7CisKKwlzaSA9IChzdHJ1Y3Qg c2lwX2hkciAqKXNrYi0+ZGF0YTsKKwltZW1zZXQoc2ksIDAsIHNpemVvZihzdHJ1Y3Qgc2lwX2hk cikpOworCVNJUF9IRFJfU0VUX1RZUEUoc2ktPmZjWzBdLCBTSVBfQ1RSTCk7CisJc2ktPmxlbiA9 IGxlbjsKKwlzaS0+Y19jbWRpZCA9IGNpZDsKKworCXJldHVybiBza2I7Cit9CisKK3ZvaWQgc2lw X2ZyZWVfY3RybF9za2J1ZmYoc3RydWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNr YikKK3sKKwltZW1zZXQoSUVFRTgwMjExX1NLQl9DQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGll ZWU4MDIxMV90eF9pbmZvKSk7CisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg c2lwX3BrdCAqc2lwX2dldF9jdHJsX2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLAorCQkJCQllbnVt IHNpcF9idWZfdHlwZSBiZnR5cGUpCit7CisJc3RydWN0IHNpcF9wa3QgKnBrdDsKKwlzdHJ1Y3Qg bGlzdF9oZWFkICpiZmxpc3Q7CisJc3RydWN0IHNpcF9oZHIgKmNoZHI7CisKKwkvKiBGSVhNRTog V2h5IHRha2luZyBzcGlubG9jayB0byBjaGVjayBsaXN0X2VtcHR5PyAqLworCWJmbGlzdCA9IChi ZnR5cGUgPT0gU0lQX1RYX0NUUkxfQlVGKSA/ICZzaXAtPmZyZWVfY3RybF90eGJ1ZiA6ICZzaXAt PmZyZWVfY3RybF9yeGJ1ZjsKKworCXNwaW5fbG9ja19iaCgmc2lwLT5sb2NrKTsKKworCWlmIChs aXN0X2VtcHR5KGJmbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNpcC0+bG9jayk7CisJCXJl dHVybiBOVUxMOworCX0KKworCXBrdCA9IGxpc3RfZmlyc3RfZW50cnkoYmZsaXN0LCBzdHJ1Y3Qg c2lwX3BrdCwgbGlzdCk7CisJbGlzdF9kZWwoJnBrdC0+bGlzdCk7CisJc3Bpbl91bmxvY2tfYmgo JnNpcC0+bG9jayk7CisKKwlpZiAoYmZ0eXBlID09IFNJUF9UWF9DVFJMX0JVRikgeworCQljaGRy ID0gKHN0cnVjdCBzaXBfaGRyICopcGt0LT5idWZfYmVnaW47CisJCVNJUF9IRFJfU0VUX1RZUEUo Y2hkci0+ZmNbMF0sIFNJUF9DVFJMKTsKKwkJcGt0LT5idWYgPSBwa3QtPmJ1Zl9iZWdpbiArIFNJ UF9DVFJMX0hEUl9MRU47CisJfSBlbHNlIHsKKwkJcGt0LT5idWYgPSBwa3QtPmJ1Zl9iZWdpbjsK Kwl9CisKKwlyZXR1cm4gcGt0OworfQorCitzdGF0aWMgdm9pZCBzaXBfcmVjbGFpbV9jdHJsX2J1 ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2lwX3BrdCAqcGt0LAorCQkJCSBlbnVtIHNp cF9idWZfdHlwZSBiZnR5cGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYmZsaXN0OworCisJaWYg KGJmdHlwZSA9PSBTSVBfVFhfQ1RSTF9CVUYpCisJCWJmbGlzdCA9ICZzaXAtPmZyZWVfY3RybF90 eGJ1ZjsKKwllbHNlIGlmIChiZnR5cGUgPT0gU0lQX1JYX0NUUkxfQlVGKQorCQliZmxpc3QgPSAm c2lwLT5mcmVlX2N0cmxfcnhidWY7CisJZWxzZQorCQlyZXR1cm47CisKKwlwa3QtPmJ1ZiA9IHBr dC0+YnVmX2JlZ2luOworCisJc3Bpbl9sb2NrX2JoKCZzaXAtPmxvY2spOworCWxpc3RfYWRkX3Rh aWwoJnBrdC0+bGlzdCwgYmZsaXN0KTsKKwlzcGluX3VubG9ja19iaCgmc2lwLT5sb2NrKTsKK30K KworaW50IHNpcF9wb2xsX2Jvb3R1cF9ldmVudChzdHJ1Y3QgZXNwX3NpcCAqc2lwKQoreworCWlu dCByZXQgPSAwOworCisJaWYgKGdsX2Jvb3R1cF9jcGx4KQorCQlyZXQgPSB3YWl0X2Zvcl9jb21w bGV0aW9uX3RpbWVvdXQoZ2xfYm9vdHVwX2NwbHgsIDIgKiBIWik7CisKKwlpZiAoIXJldCkgewor CQlkZXZfZXJyKHNpcC0+ZXB1Yi0+ZGV2LCAiYm9vdHVwIGV2ZW50IHRpbWVvdXRcbiIpOworCQly ZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXNpZl9nZXRfYXRlX2NvbmZpZygpKQorCQly ZXQgPSBlc3BfcmVnaXN0ZXJfbWFjODAyMTEoc2lwLT5lcHViKTsKKworCWF0b21pY19zZXQoJnNp cC0+c3RhdGUsIFNJUF9SVU4pOworCisJcmV0dXJuIHJldDsKK30KKworLyogRklYTUU6IGFsd2F5 cyByZXR1cm5pbmcgMCA/ICovCitpbnQgc2lwX3BvbGxfcmVzZXR0aW5nX2V2ZW50KHN0cnVjdCBl c3Bfc2lwICpzaXApCit7CisJdW5zaWduZWQgaW50IHJldDsKKworCWlmIChnbF9ib290dXBfY3Bs eCkKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KGdsX2Jvb3R1cF9jcGx4LCAx MCAqIEhaKTsKKworCWlmICghcmV0KSB7CisJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJyZXNl dHRpbmcgZXZlbnQgdGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXJl dHVybiAwOworfQorCitib29sIHNpcF9xdWV1ZV9uZWVkX3N0b3Aoc3RydWN0IGVzcF9zaXAgKnNp cCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJnNpcC0+dHhfZGF0YV9wa3RfcXVldWVkKSA+PSBT SVBfU1RPUF9RVUVVRV9USFJFU0hPTEQgfHwKKwkJKGF0b21pY19yZWFkKCZzaXAtPnR4X2NyZWRp dHMpIDwgOCAmJgorCQkgYXRvbWljX3JlYWQoJnNpcC0+dHhfZGF0YV9wa3RfcXVldWVkKSA+PSBT SVBfU1RPUF9RVUVVRV9USFJFU0hPTEQgLyA0ICogMyk7Cit9CisKK2Jvb2wgc2lwX3F1ZXVlX21h eV9yZXN1bWUoc3RydWN0IGVzcF9zaXAgKnNpcCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJnNp cC0+ZXB1Yi0+dHhxX3N0b3BwZWQpICYmCisJCSF0ZXN0X2JpdChFU1BfV0xfRkxBR19TVE9QX1RY USwgJnNpcC0+ZXB1Yi0+d2wuZmxhZ3MpICYmCisJCSgoYXRvbWljX3JlYWQoJnNpcC0+dHhfY3Jl ZGl0cykgPj0gMTYgJiYKKwkJICBhdG9taWNfcmVhZCgmc2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQp IDwgU0lQX1JFU1VNRV9RVUVVRV9USFJFU0hPTEQgKiAyKSB8fAorCQkgYXRvbWljX3JlYWQoJnNp cC0+dHhfZGF0YV9wa3RfcXVldWVkKSA8IFNJUF9SRVNVTUVfUVVFVUVfVEhSRVNIT0xEKTsKK30K KworaW50IHNpcF9jbWRfZW5xdWV1ZShzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBpbnQgcHJpb3IpCit7CisJaWYgKCFzaXAgfHwgIXNpcC0+ZXB1YiB8fCAhc2tiKSB7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwcmlvciA9PSBFTlFVRVVFX1BSSU9SX0hF QUQpCisJCXNrYl9xdWV1ZV9oZWFkKCZzaXAtPmVwdWItPnR4cSwgc2tiKTsKKwllbHNlCisJCXNr Yl9xdWV1ZV90YWlsKCZzaXAtPmVwdWItPnR4cSwgc2tiKTsKKworCWlmICghc2lmX2dldF9hdGVf Y29uZmlnKCkpCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNpcC0+ZXB1Yi0+aHcsICZzaXAtPmVw dWItPnR4X3dvcmspOworCWVsc2UKKwkJcXVldWVfd29yayhzaXAtPmVwdWItPmVzcF93a3EsICZz aXAtPmVwdWItPnR4X3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2lwX3R4X2RhdGFf cGt0X2VucXVldWUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHN0cnVjdCBza19idWZmICpza2IpCit7 CisJaWYgKCFlcHViIHx8ICFlcHViLT5zaXAgfHwgIXNrYikKKwkJcmV0dXJuOworCisJc2tiX3F1 ZXVlX3RhaWwoJmVwdWItPnR4cSwgc2tiKTsKKwlhdG9taWNfaW5jKCZlcHViLT5zaXAtPnR4X2Rh dGFfcGt0X3F1ZXVlZCk7CisKKwlpZiAoc2lwX3F1ZXVlX25lZWRfc3RvcChlcHViLT5zaXApKQor CQlpZiAoZXB1Yi0+aHcpIHsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhlcHViLT5odyk7CisJ CQlhdG9taWNfc2V0KCZlcHViLT50eHFfc3RvcHBlZCwgdHJ1ZSk7CisJCX0KK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L2VzcF9zaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmZlNThhYWU0YmE1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5 L2VzcF9zaXAuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSAt IDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0 cm9ucworICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJv bnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0VTUF9T SVBfSAorI2RlZmluZSBfRVNQX1NJUF9ICisKKyNpbmNsdWRlICJzaXAyX2NvbW1vbi5oIgorCisj ZGVmaW5lIFNJUF9DVFJMX0NSRURJVF9SRVNFUlZFCQkyCisKKyNkZWZpbmUgU0lQX1BLVF9NQVhf TEVOCQkJKDEwMjQgKiAxNikKKworLyogMTZLQiBvbiBub3JtYWwgWDg2IHN5c3RlbSwgc2hvdWxk IGNoZWNrIGJlZm9yZSBwb3J0aW5nIHRvIG9yaHRlcnMgKi8KKworI2RlZmluZSBTSVBfVFhfQUdH Ul9CVUZfU0laRQkJKDQgKiBQQUdFX1NJWkUpCisjZGVmaW5lIFNJUF9SWF9BR0dSX0JVRl9TSVpF CQkoNCAqIFBBR0VfU0laRSkKKworc3RydWN0IHNrX2J1ZmY7CisKK3N0cnVjdCBzaXBfcGt0IHsK KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTggKmJ1Zl9iZWdpbjsKKwl1MzIgYnVmX2xlbjsK Kwl1OCAqYnVmOworfTsKKworZW51bSBSRUNBTENfQ1JFRElUX1NUQVRFIHsKKwlSRUNBTENfQ1JF RElUX0RJU0FCTEUgPSAwLAorCVJFQ0FMQ19DUkVESVRfRU5BQkxFID0gMSwKK307CisKK2VudW0g RU5RVUVVRV9QUklPUiB7CisJRU5RVUVVRV9QUklPUl9UQUlMID0gMCwKKwlFTlFVRVVFX1BSSU9S X0hFQUQsCit9OworCitlbnVtIFNJUF9TVEFURSB7CisJU0lQX0lOSVQgPSAwLAorCVNJUF9QUkVQ QVJFX0JPT1QsCisJU0lQX0JPT1QsCisJU0lQX1NFTkRfSU5JVCwKKwlTSVBfV0FJVF9CT09UVVAs CisJU0lQX1JVTiwKKwlTSVBfU1VTUEVORCwKKwlTSVBfU1RPUAorfTsKKworZW51bSBzaXBfbm90 aWZpZXIgeworCVNJUF9UWF9ET05FID0gMSwKKwlTSVBfUlhfRE9ORSA9IDIsCit9OworCisjZGVm aW5lIFNJUF9DUkVESVRTX0xPV19USFJFU0hPTEQgIDY0CS8vaS5lLiA0aworCitzdHJ1Y3QgZXNw X3NpcCB7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2N0cmxfdHhidWY7CisJc3RydWN0IGxpc3Rf aGVhZCBmcmVlX2N0cmxfcnhidWY7CisKKwl1MzIgcnhzZXE7CQkvKiBzaXAgcGt0IHNlcSwgc2hv dWxkIG1hdGNoIHRhcmdldCBzaWRlICovCisJdTMyIHR4c2VxOworCXUzMiB0eGRhdGFzZXE7CisK Kwl1OCB0b19ob3N0X3NlcTsKKworCWF0b21pY190IHN0YXRlOworCXNwaW5sb2NrX3QgbG9jazsK KwlhdG9taWNfdCB0eF9jcmVkaXRzOworCisJYXRvbWljX3QgdHhfYXNrX2NyZWRpdF91cGRhdGU7 CisKKwl1OCAqcmF3YnVmOwkJLyogdXNlZCBpbiBib290IHN0YWdlLCBmcmVlIG9uY2UgY2hpcCBp cyBmdWxseSB1cCAqLworCXU4ICp0eF9hZ2dyX2J1ZjsKKwl1OCAqdHhfYWdncl93cml0ZV9wdHI7 CS8qIHVwZGF0ZSBhZnRlciBpbnNlcnRpb24gb2YgZWFjaCBwa3QgKi8KKwl1OCAqdHhfYWdncl9s YXN0cGt0X3B0cjsKKworCXN0cnVjdCBtdXRleCByeF9tdHg7CisJc3RydWN0IHNrX2J1ZmZfaGVh ZCByeHE7CisJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3Byb2Nlc3Nfd29yazsKKworCXUxNiB0eF9i bGtzejsKKwl1MTYgcnhfYmxrc3o7CisKKwlib29sIGR1bXBfcnBibV9lcnI7CisJYm9vbCBzZW5k dXBfcnBibV9wa3Q7CisJYm9vbCByeGFib3J0X2ZpeGVkOworCWJvb2wgc3VwcG9ydF9iZ3NjYW47 CisJdTggY3JlZGl0X3RvX3Jlc2VydmU7CisKKwlhdG9taWNfdCBjcmVkaXRfc3RhdHVzOworCXN0 cnVjdCB0aW1lcl9saXN0IGNyZWRpdF90aW1lcjsKKworCWF0b21pY190IG5vaXNlX2Zsb29yOwor CisJdTMyIHR4X3RvdF9sZW47CQkvKiB0b3RhbCBsZW4gZm9yIG9uZSB0cmFuc2FjdGlvbiAqLwor CXUzMiByeF90b3RfbGVuOworCisJYXRvbWljX3QgcnhfaGFuZGxpbmc7CisJYXRvbWljX3QgdHhf ZGF0YV9wa3RfcXVldWVkOworCisJYXRvbWljX3QgZGF0YV90eF9zdG9wcGVkOworCWF0b21pY190 IHR4X3N0b3BwZWQ7CisKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YjsKK307CisKK2ludCBzaXBfcngo c3RydWN0IGVzcF9wdWIgKmVwdWIpOworCitpbnQgc2lwX3dyaXRlX21lbW9yeShzdHJ1Y3QgZXNw X3NpcCAqc2lwLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbik7CisKK2ludCBzaXBfc2VuZF9j bWQoc3RydWN0IGVzcF9zaXAgKnNpcCwgaW50IGNpZCwgdTMyIGNtZGxlbiwgdm9pZCAqY21kKTsK Kworc3RydWN0IGVzcF9zaXAgKnNpcF9hdHRhY2goc3RydWN0IGVzcF9wdWIgKmVwdWIpOworCitp bnQgc2lwX3Bvc3RfaW5pdChzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2lwX2V2dF9ib290 dXAyICpiZXZ0KTsKKwordm9pZCBzaXBfZGV0YWNoKHN0cnVjdCBlc3Bfc2lwICpzaXApOworCit2 b2lkIHNpcF90eHFfcHJvY2VzcyhzdHJ1Y3QgZXNwX3B1YiAqZXB1Yik7CisKK3N0cnVjdCBza19i dWZmICpzaXBfYWxsb2NfY3RybF9za2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLCB1MTYgbGVuLCB1 MzIgY2lkKTsKKwordm9pZCBzaXBfZnJlZV9jdHJsX3NrYnVmZihzdHJ1Y3QgZXNwX3NpcCAqc2lw LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworYm9vbCBzaXBfcXVldWVfbmVlZF9zdG9wKHN0cnVj dCBlc3Bfc2lwICpzaXApOworYm9vbCBzaXBfcXVldWVfbWF5X3Jlc3VtZShzdHJ1Y3QgZXNwX3Np cCAqc2lwKTsKKwordm9pZCBzaXBfdHhfZGF0YV9wa3RfZW5xdWV1ZShzdHJ1Y3QgZXNwX3B1YiAq ZXB1Yiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2ludCBzaXBfY21kX2VucXVldWUoc3RydWN0 IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaW9yKTsKKworaW50IHNp cF9wb2xsX2Jvb3R1cF9ldmVudChzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKKworaW50IHNpcF9wb2xs X3Jlc2V0dGluZ19ldmVudChzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKKwordm9pZCBzaXBfdHJpZ2dl cl90eHFfcHJvY2VzcyhzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKKwordm9pZCBzaXBfc2VuZF9jaGlw X2luaXQoc3RydWN0IGVzcF9zaXAgKnNpcCk7CisKK2Jvb2wgbW9kX3N1cHBvcnRfbm9fdHhhbXBk dSh2b2lkKTsKKworYm9vbCBtb2Rfc3VwcG9ydF9ub19yeGFtcGR1KHZvaWQpOworI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMuYyBiL2RyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uYjM1NDI4ZDcwYzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFn aW5nL2VzcDgwODkvZXNwX3V0aWxzLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMDkgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIw MTcgRnJlZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6 QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisj aW5jbHVkZSAibGludXgvdHlwZXMuaCIKKyNpbmNsdWRlICJsaW51eC9rZXJuZWwuaCIKKyNpbmNs dWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNs dWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlIDxs aW51eC9pcC5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgorCisjaW5jbHVkZSAiZXNwX3B1 Yi5oIgorI2luY2x1ZGUgImVzcF91dGlscy5oIgorI2luY2x1ZGUgImVzcF93bWFjLmgiCisjaW5j bHVkZSAiZXNwX2RlYnVnLmgiCisKKy8qIENvbnZlcnQgSUVFRSBjaGFubmVsIG51bWJlciB0byBN SHogZnJlcXVlbmN5LiAqLwordTMyIGVzcF9pZWVlMm1oeih1OCBjaGFuKQoreworCWlmIChjaGFu ID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKworCWlmIChjaGFuIDwgMTQpCisJCXJldHVybiAyNDA3 ICsgY2hhbiAqIDU7CisKKwlyZXR1cm4gMjUxMiArICgoY2hhbiAtIDE1KSAqIDIwKTsKKwkvL1RP RE8sIGFkZCA1R0h6Cit9CisKK2VudW0geworCUVTUF9SQVRFXzFfTE9ORyA9IDB4MCwKKwlFU1Bf UkFURV8yX0xPTkcgPSAweDEsCisJRVNQX1JBVEVfMl9TSE9SVCA9IDB4NSwKKwlFU1BfUkFURV81 X1NIT1JUID0gMHg2LAorCUVTUF9SQVRFXzVfTE9ORyA9IDB4MiwKKwlFU1BfUkFURV8xMV9TSE9S VCA9IDB4NywKKwlFU1BfUkFURV8xMV9MT05HID0gMHgzLAorCUVTUF9SQVRFXzYgPSAweGIsCisJ RVNQX1JBVEVfOSA9IDB4ZiwKKwlFU1BfUkFURV8xMiA9IDB4YSwKKwlFU1BfUkFURV8xOCA9IDB4 ZSwKKwlFU1BfUkFURV8yNCA9IDB4OSwKKwlFU1BfUkFURV8zNiA9IDB4ZCwKKwlFU1BfUkFURV80 OCA9IDB4OCwKKwlFU1BfUkFURV81NCA9IDB4YywKKwkvKiAgICAgICAgRVNQX1JBVEVfTUNTMCA9 MHgxMCwKKwkgKgkgIEVTUF9SQVRFX01DUzEgPTB4MTEsCisJICoJICBFU1BfUkFURV9NQ1MyID0w eDEyLAorCSAqCSAgRVNQX1JBVEVfTUNTMyA9MHgxMywKKwkgKgkgIEVTUF9SQVRFX01DUzQgPTB4 MTQsCisJICoJICBFU1BfUkFURV9NQ1M1ID0weDE1LAorCSAqCSAgRVNQX1JBVEVfTUNTNiA9MHgx NiwKKwkgKgkgIEVTUF9SQVRFX01DUzcgPTB4MTcsCisJICovCit9OworCitzdGF0aWMgdTggZXNw X3JhdGVfdGFibGVbMjBdID0geworCUVTUF9SQVRFXzFfTE9ORywKKwlFU1BfUkFURV8yX1NIT1JU LAorCUVTUF9SQVRFXzVfU0hPUlQsCisJRVNQX1JBVEVfMTFfU0hPUlQsCisJRVNQX1JBVEVfNiwK KwlFU1BfUkFURV85LAorCUVTUF9SQVRFXzEyLAorCUVTUF9SQVRFXzE4LAorCUVTUF9SQVRFXzI0 LAorCUVTUF9SQVRFXzM2LAorCUVTUF9SQVRFXzQ4LAorCUVTUF9SQVRFXzU0LAorCS8qICAgICAg RVNQX1JBVEVfTUNTMCwKKwkgKiAJRVNQX1JBVEVfTUNTMSwKKwkgKglFU1BfUkFURV9NQ1MyLAor CSAqCUVTUF9SQVRFX01DUzMsCisJICoJRVNQX1JBVEVfTUNTNCwKKwkgKglFU1BfUkFURV9NQ1M1 LAorCSAqCUVTUF9SQVRFX01DUzYsCisJICoJRVNQX1JBVEVfTUNTNywKKwkgKi8KK307CisKK3M4 IGVzcF93bWFjX3JhdGUyaWR4KHU4IHJhdGUpCit7CisJaW50IGk7CisKKwlpZiAocmF0ZSA9PSBF U1BfUkFURV8yX0xPTkcpCisJCXJldHVybiAxOworCisJaWYgKHJhdGUgPT0gRVNQX1JBVEVfNV9M T05HKQorCQlyZXR1cm4gMjsKKworCWlmIChyYXRlID09IEVTUF9SQVRFXzExX0xPTkcpCisJCXJl dHVybiAzOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCisJCWlmIChyYXRlID09IGVzcF9y YXRlX3RhYmxlW2ldKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBlc3Bf d21hY19yeHNlY19lcnJvcih1OCBlcnJvcikKK3sKKwlyZXR1cm4gKGVycm9yID49IFJYX1NFQ09W X0VSUiAmJiBlcnJvciA8PSBSWF9TRUNGSUZPX1RJTUVPVVQpIHx8CisJCShlcnJvciA+PSBSWF9X RVBJQ1ZfRVJSICYmIGVycm9yIDw9IFJYX1dBUElNSUNfRVJSKTsKK30KKworaW50IGVzcF9jaXBo ZXIyYWxnKGludCBjaXBoZXIpCit7CisJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9U S0lQKQorCQlyZXR1cm4gQUxHX1RLSVA7CisKKwlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NV SVRFX0NDTVApCisJCXJldHVybiBBTEdfQ0NNUDsKKworCWlmIChjaXBoZXIgPT0gV0xBTl9DSVBI RVJfU1VJVEVfV0VQNDAgfHwKKwkgICAgY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEw NCkKKwkJcmV0dXJuIEFMR19XRVA7CisKKwlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRF X0FFU19DTUFDKQorCQlyZXR1cm4gQUxHX0FFU19DTUFDOworCisJcmV0dXJuIC0xOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3V0aWxzLmggYi9kcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjNhNGQ0NjFhNGU3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L2VzcF91dGlscy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTEgLSAyMDEyIEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcg RnJlZSBFbGVjdHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZy ZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZu ZGVmIF9FU1BfVVRJTFNfSF8KKyNkZWZpbmUgX0VTUF9VVElMU19IXworCisjaW5jbHVkZSAibGlu dXgvdHlwZXMuaCIKKwordTMyIGVzcF9pZWVlMm1oeih1OCBjaGFuKTsKKworZW51bSBpZWVlODAy MTFfa2V5X2FsZyB7CisJQUxHX1dFUCwKKwlBTEdfVEtJUCwKKwlBTEdfQ0NNUCwKKwlBTEdfQUVT X0NNQUMKK307CisKK2ludCBlc3BfY2lwaGVyMmFsZyhpbnQgY2lwaGVyKTsKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3dsLmggYi9kcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9lc3Bfd2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjllYjFmNjQyMTk0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF93bC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkg LSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVj dHJvbnMKKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ry b25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9FU1Bf V0xfSF8KKyNkZWZpbmUgX0VTUF9XTF9IXworCisvLyNkZWZpbmUgTUFYX1BST0JFRF9TU0lEX0lO REVYIDkKKworZW51bSB7CisJQ09ORl9IV19CSVRfUkFURV8xTUJQUyA9IEJJVCgwKSwKKwlDT05G X0hXX0JJVF9SQVRFXzJNQlBTID0gQklUKDEpLAorCUNPTkZfSFdfQklUX1JBVEVfNV81TUJQUyA9 IEJJVCgyKSwKKwlDT05GX0hXX0JJVF9SQVRFXzExTUJQUyA9IEJJVCgzKSwKKwlDT05GX0hXX0JJ VF9SQVRFXzZNQlBTID0gQklUKDQpLAorCUNPTkZfSFdfQklUX1JBVEVfOU1CUFMgPSBCSVQoNSks CisJQ09ORl9IV19CSVRfUkFURV8xMk1CUFMgPSBCSVQoNiksCisJQ09ORl9IV19CSVRfUkFURV8x OE1CUFMgPSBCSVQoNyksCisJQ09ORl9IV19CSVRfUkFURV8yMk1CUFMgPSBCSVQoOCksCisJQ09O Rl9IV19CSVRfUkFURV8yNE1CUFMgPSBCSVQoOSksCisJQ09ORl9IV19CSVRfUkFURV8zNk1CUFMg PSBCSVQoMTApLAorCUNPTkZfSFdfQklUX1JBVEVfNDhNQlBTID0gQklUKDExKSwKKwlDT05GX0hX X0JJVF9SQVRFXzU0TUJQUyA9IEJJVCgxMiksCit9OworCisjZGVmaW5lIENPTkZfSFdfQklUX1JB VEVfMTFCX01BU0sJKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCBDT05GX0hXX0JJVF9SQVRFXzJN QlBTIHwgQ09ORl9IV19CSVRfUkFURV81XzVNQlBTIHwgQ09ORl9IV19CSVRfUkFURV8xMU1CUFMp CisKKyNlbmRpZgkJCQkvKiBfRVNQX1dMX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9lc3Bfd21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3dtYWMu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY3ZWE4ZTE0N2M0Mwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF93bWFjLmgKQEAg LTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTIgRXNwcmVzc2lm IFN5c3RlbS4KKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBR dWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0VTUF9XTUFDX0hfCisjZGVmaW5l IF9FU1BfV01BQ19IXworCitzdHJ1Y3QgZXNwX21hY19yeF9jdHJsIHsKKwlzaWduZWQgcnNzaTo4 OworCXVuc2lnbmVkIHJhdGU6NDsKKwl1bnNpZ25lZCBpc19ncm91cDoxOworCXVuc2lnbmVkOjE7 CisJdW5zaWduZWQgc2lnX21vZGU6MjsKKwl1bnNpZ25lZCBsZWdhY3lfbGVuZ3RoOjEyOworCXVu c2lnbmVkIGRhbWF0Y2gwOjE7CisJdW5zaWduZWQgZGFtYXRjaDE6MTsKKwl1bnNpZ25lZCBic3Np ZG1hdGNoMDoxOworCXVuc2lnbmVkIGJzc2lkbWF0Y2gxOjE7CisJdW5zaWduZWQgTUNTOjc7CisJ dW5zaWduZWQgQ1dCOjE7CisJdW5zaWduZWQgSFRfbGVuZ3RoOjE2OworCXVuc2lnbmVkIHNtb290 aGluZzoxOworCXVuc2lnbmVkIG5vdF9zb3VuZGluZzoxOworCXVuc2lnbmVkOjE7CisJdW5zaWdu ZWQgYWdncmVnYXRpb246MTsKKwl1bnNpZ25lZCBTVEJDOjI7CisJdW5zaWduZWQgRkVDX0NPRElO RzoxOworCXVuc2lnbmVkIFNHSToxOworCXVuc2lnbmVkIHJ4ZW5kX3N0YXRlOjg7CisJdW5zaWdu ZWQgYW1wZHVfY250Ojg7CisJdW5zaWduZWQgY2hhbm5lbDo0OworCXVuc2lnbmVkOjQ7CisJc2ln bmVkIG5vaXNlX2Zsb29yOjg7Cit9OworCitzdHJ1Y3QgZXNwX3J4X2FtcGR1X2xlbiB7CisJdW5z aWduZWQgc3Vic3RhdGU6ODsKKwl1bnNpZ25lZCBzdWJsZW46MTI7CisJdW5zaWduZWQ6MTI7Cit9 OworCitzdHJ1Y3QgZXNwX3R4X2FtcGR1X2VudHJ5IHsKKwl1MzIgc3ViX2xlbjoxMiwgZGlsaV9u dW06NywgOjEsIG51bGxfYnl0ZToyLCBkYXRhOjEsIGVuYzoxLCBzZXE6ODsKK307CisKKy8vcnhl bmRfc3RhdGUgZmxhZ3MKKyNkZWZpbmUgUlhfUFlIX0VSUl9NSU4JCTB4NDIKKyNkZWZpbmUgUlhf QUdDX0VSUl9NSU4JCTB4NDIKKyNkZWZpbmUgUlhfQUdDX0VSUl9NQVgJCTB4NDcKKyNkZWZpbmUg UlhfT0ZETV9FUlJfTUlOCQkweDUwCisjZGVmaW5lIFJYX09GRE1fRVJSX01BWAkJMHg1OAorI2Rl ZmluZSBSWF9DQ0tfRVJSX01JTgkJMHg1OQorI2RlZmluZSBSWF9DQ0tfRVJSX01BWAkJMHg1Rgor I2RlZmluZSBSWF9BQk9SVAkJMHg4MAorI2RlZmluZSBSWF9TRl9FUlIJCTB4NDAKKyNkZWZpbmUg UlhfRkNTX0VSUgkJMHg0MQorI2RlZmluZSBSWF9BSEJPVl9FUlIJCTB4QzAKKyNkZWZpbmUgUlhf QlVGT1ZfRVJSCQkweEMxCisjZGVmaW5lIFJYX0JVRklOVl9FUlIJCTB4QzIKKyNkZWZpbmUgUlhf QU1QRFVTRl9FUlIJCTB4QzMKKyNkZWZpbmUgUlhfQU1QRFVCVUZPVl9FUlIJMHhDNAorI2RlZmlu ZSBSWF9NQUNCQkZJRk9PVl9FUlIJMHhDNQorI2RlZmluZSBSWF9SUEJNX0VSUgkJMHhDNgorI2Rl ZmluZSBSWF9CVEZPUkNFX0VSUgkJMHhDNworI2RlZmluZSBSWF9TRUNPVl9FUlIJCTB4RTEKKyNk ZWZpbmUgUlhfU0VDUFJPVF9FUlIwCQkweEUyCisjZGVmaW5lIFJYX1NFQ1BST1RfRVJSMQkJMHhF MworI2RlZmluZSBSWF9TRUNLRVlfRVJSCQkweEU0CisjZGVmaW5lIFJYX1NFQ0NSTEVOX0VSUgkJ MHhFNQorI2RlZmluZSBSWF9TRUNGSUZPX1RJTUVPVVQJMHhFNgorI2RlZmluZSBSWF9XRVBJQ1Zf RVJSCQkweEYwCisjZGVmaW5lIFJYX1RLSVBJQ1ZfRVJSCQkweEY0CisjZGVmaW5lIFJYX1RLSVBN SUNfRVJSCQkweEY1CisjZGVmaW5lIFJYX0NDTVBNSUNfRVJSCQkweEY4CisjZGVmaW5lIFJYX1dB UElNSUNfRVJSCQkweEZDCisKK3M4IGVzcF93bWFjX3JhdGUyaWR4KHU4IHJhdGUpOworYm9vbCBl c3Bfd21hY19yeHNlY19lcnJvcih1OCBlcnJvcik7CisKKyNlbmRpZgkJCQkvKiBfRVNQX1dNQUNf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L3NkaW9fc2lmX2VzcC5j IGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2Rpb19zaWZfZXNwLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kODg0MmY1MDg1Y2UKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9zZGlvX3NpZl9lc3AuYwpAQCAtMCwwICsxLDU1MiBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTMgRXNwcmVzc2lmIFN5c3RlbS4KKyAq IENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucworICogICAgICBRdWVudGluIFNjaHVs eiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorI2luY2x1ZGUgPGxp bnV4L21tYy9tbWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY29yZS5oPgorI2luY2x1ZGUgPGxp bnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgorI2luY2x1 ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvLmg+Cisj aW5jbHVkZSA8bGludXgvbW1jL3NkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlICJlc3BfcHViLmgiCisjaW5jbHVkZSAiZXNwX3NpZi5o IgorI2luY2x1ZGUgImVzcF9zaXAuaCIKKyNpbmNsdWRlICJlc3BfZGVidWcuaCIKKyNpbmNsdWRl ICJzbGNfaG9zdF9yZWdpc3Rlci5oIgorI2luY2x1ZGUgImVzcF92ZXJzaW9uLmgiCisjaW5jbHVk ZSAiZXNwX2N0cmwuaCIKKyNpbmNsdWRlICJlc3BfZmlsZS5oIgorCit1bnNpZ25lZCBpbnQgZXNw X21zZ19sZXZlbCA9IEVTUF9EQkdfRVJST1IgfCBFU1BfU0hPVzsKKworLyogSGRHOiBOb3RlOgor ICogMSkgTU1DX0hBU19GT1JDRV9ERVRFQ1RfQ0hBTkdFIGlzIGEgaGFjayB3aGljaCBpcyBzZXQg YnkgbXkgc3VueGktd2lwCisgKiAgICB0cmVlLiBGSVhNRSByZXBsYWNlIHdpdGggYSB2ZXJzaW9u IGNoZWNrIG9uY2UgbW1jX2ZvcmNlX2RldGVjdF9jaGFuZ2UoKQorICogICAgaXMgYWRkZWQgdG8g dGhlIG1haW5saW5lIGtlcm5lbC4KKyAqIDIpIFRoaXMgdmVyc2lvbiBkb2VzIE5PVCBpbXBsZW1l bnQga2VlcF9wb3dlciwgdGhlIGR0cyBtdXN0IG1hcmsgdGhlCisgKiAgICByZWd1bGF0b3JzIGFz IHJlZ3VsYXRvci1hbHdheXMtb24gYW5kIG5vdCB1c2UgbW1jLXB3cnNlcSBmb3IgdGhpcyBzdHVi CisgKiAgICB0byB3b3JrLgorICovCisjaWZuZGVmIE1NQ19IQVNfRk9SQ0VfREVURUNUX0NIQU5H RQordm9pZCBtbWNfZm9yY2VfZGV0ZWN0X2NoYW5nZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVu c2lnbmVkIGxvbmcgZGVsYXksCisJCQkgICAgIGJvb2wga2VlcF9wb3dlcikKK3sKKwlob3N0LT5j YXBzICY9IH5NTUNfQ0FQX05PTlJFTU9WQUJMRTsKKwlob3N0LT5jYXBzIHw9IE1NQ19DQVBfTkVF RFNfUE9MTDsKKwltbWNfZGV0ZWN0X2NoYW5nZShob3N0LCBkZWxheSk7Cit9CisjZW5kaWYKKwor I2RlZmluZSBFU1BfRE1BX0lCVUZTWiAgIDIwNDgKKworc3RydWN0IGVzcF9zZGlvX2N0cmwgKnNp Zl9zY3RybDsKKworc3RhdGljIGludCBlc2Rpb19wb3dlcl9vZmYoc3RydWN0IGVzcF9zZGlvX2N0 cmwgKnNjdHJsKTsKK3N0YXRpYyBpbnQgZXNkaW9fcG93ZXJfb24oc3RydWN0IGVzcF9zZGlvX2N0 cmwgKnNjdHJsKTsKKwordm9pZCBzaWZfc2V0X2Nsb2NrKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMs IGludCBjbGspOworCit2b2lkIHNpZl9sb2NrX2J1cyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKK3sK KwlpZiAoIWVwdWIgfHwgIWVwdWItPnNpZiB8fCAhZXB1Yi0+c2lmLT5mdW5jKQorCQlyZXR1cm47 CisJc2Rpb19jbGFpbV9ob3N0KGVwdWItPnNpZi0+ZnVuYyk7Cit9CisKK3ZvaWQgc2lmX3VubG9j a19idXMoc3RydWN0IGVzcF9wdWIgKmVwdWIpCit7CisJaWYgKCFlcHViIHx8ICFlcHViLT5zaWYg fHwgIWVwdWItPnNpZi0+ZnVuYykKKwkJcmV0dXJuOworCXNkaW9fcmVsZWFzZV9ob3N0KGVwdWIt PnNpZi0+ZnVuYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBiYWRfYnVmKHU4ICpidWYpCit7 CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MyB8fCAhdmlydF9hZGRyX3ZhbGlkKGJ1 Zik7Cit9CisKK3U4IHNkaW9faW9fcmVhZGIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIGludCBhZGRy LCBpbnQgKnJlcykKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZXB1Yi0+c2lmLT5mdW5j OworCisJaWYgKCFmdW5jLT5udW0pCisJCXJldHVybiBzZGlvX2YwX3JlYWRiKGZ1bmMsIGFkZHIs IHJlcyk7CisKKwlyZXR1cm4gc2Rpb19yZWFkYihmdW5jLCBhZGRyLCByZXMpOworfQorCit2b2lk IHNkaW9faW9fd3JpdGViKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCB2YWx1ZSwgaW50IGFkZHIs IGludCAqcmVzKQoreworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBlcHViLT5zaWYtPmZ1bmM7 CisKKwlpZiAoIWZ1bmMtPm51bSkKKwkJc2Rpb19mMF93cml0ZWIoZnVuYywgdmFsdWUsIGFkZHIs IHJlcyk7CisJZWxzZQorCQlzZGlvX3dyaXRlYihmdW5jLCB2YWx1ZSwgYWRkciwgcmVzKTsKK30K KworaW50IHNpZl9pbyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsIHUz MiBsZW4sIHUzMiBmbGFnLAorCSAgIGJvb2wgc3luYykKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpm dW5jOworCWludCBlcnIgPSAwOworCXU4ICppYnVmOworCWJvb2wgbmVlZF9pYnVmID0gZmFsc2U7 CisKKwlpZiAoIWVwdWIgfHwgIWJ1ZiB8fCAhZXB1Yi0+c2lmIHx8ICFlcHViLT5zaWYtPmZ1bmMp IHsKKwkJRVNTRVJUKDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmdW5jID0gZXB1Yi0+ c2lmLT5mdW5jOworCisJaWYgKGJhZF9idWYoYnVmKSkgeworCQluZWVkX2lidWYgPSB0cnVlOwor CQlpYnVmID0gZXB1Yi0+c2lmLT5kbWFfYnVmZmVyOworCX0gZWxzZSB7CisJCWlidWYgPSBidWY7 CisJfQorCisJaWYgKGZsYWcgJiBTSUZfVE9fREVWSUNFKSB7CisJCWlmIChuZWVkX2lidWYpCisJ CQltZW1jcHkoaWJ1ZiwgYnVmLCBsZW4pOworCisJCWlmIChzeW5jKQorCQkJc2Rpb19jbGFpbV9o b3N0KGZ1bmMpOworCisJCWlmIChmbGFnICYgU0lGX0ZJWEVEX0FERFIpCisJCQllcnIgPSBzZGlv X3dyaXRlc2IoZnVuYywgYWRkciwgaWJ1ZiwgbGVuKTsKKwkJZWxzZSBpZiAoZmxhZyAmIFNJRl9J TkNfQUREUikKKwkJCWVyciA9IHNkaW9fbWVtY3B5X3RvaW8oZnVuYywgYWRkciwgaWJ1ZiwgbGVu KTsKKworCQlpZiAoc3luYykKKwkJCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCisJfSBlbHNl IGlmIChmbGFnICYgU0lGX0ZST01fREVWSUNFKSB7CisJCWlmIChzeW5jKQorCQkJc2Rpb19jbGFp bV9ob3N0KGZ1bmMpOworCisJCWlmIChmbGFnICYgU0lGX0ZJWEVEX0FERFIpCisJCQllcnIgPSBz ZGlvX3JlYWRzYihmdW5jLCBpYnVmLCBhZGRyLCBsZW4pOworCQllbHNlIGlmIChmbGFnICYgU0lG X0lOQ19BRERSKQorCQkJZXJyID0gc2Rpb19tZW1jcHlfZnJvbWlvKGZ1bmMsIGlidWYsIGFkZHIs IGxlbik7CisKKwkJaWYgKHN5bmMpCisJCQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKworCQlp ZiAoIWVyciAmJiBuZWVkX2lidWYpCisJCQltZW1jcHkoYnVmLCBpYnVmLCBsZW4pOworCX0KKwor CXJldHVybiBlcnI7Cit9CisKK2ludCBzaWZfaW9fcmF3KHN0cnVjdCBlc3BfcHViICplcHViLCB1 MzIgYWRkciwgdTggKmJ1ZiwgdTMyIGxlbiwgdTMyIGZsYWcpCit7CisJcmV0dXJuIHNpZl9pbyhl cHViLCBhZGRyLCBidWYsIGxlbiwgZmxhZywgZmFsc2UpOworfQorCitpbnQgc2lmX2lvX3N5bmMo c3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuLCB1MzIgZmxh ZykKK3sKKwlyZXR1cm4gc2lmX2lvKGVwdWIsIGFkZHIsIGJ1ZiwgbGVuLCBmbGFnLCB0cnVlKTsK K30KKworaW50IHNpZl9sbGRlc2Moc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4ICpidWYsIHUzMiBs ZW4sIGJvb2wgc3luYywgYm9vbCByZWFkLAorCSAgICAgICBib29sIG5vcm91bmQpCit7CisJdTMy IHJlYWRfbGVuLCBhZGRyLCBmbGFnczsKKworCWlmICghZXB1YiB8fCAhYnVmIHx8ICFlcHViLT5z aWYgfHwgIWVwdWItPnNpZi0+dGFyZ2V0X2lkKSB7CisJCUVTU0VSVCgwKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKGVwdWItPnNpZi0+dGFyZ2V0X2lkID09IDB4NjAwICYmICFub3Jv dW5kKQorCQlyZWFkX2xlbiA9IHJvdW5kdXAobGVuLCBlcHViLT5zaWYtPnNsY19ibGtfc3opOwor CWVsc2UKKwkJcmVhZF9sZW4gPSBsZW47CisKKwlpZiAocmVhZCkgeworCQlhZGRyID0gZXB1Yi0+ c2lmLT5zbGNfd2luZG93X2VuZF9hZGRyIC0gMiAtIGxlbjsKKwkJZmxhZ3MgPSBTSUZfRlJPTV9E RVZJQ0UgfCBTSUZfQllURV9CQVNJUyB8IFNJRl9JTkNfQUREUjsKKwl9IGVsc2UgeworCQlhZGRy ID0gZXB1Yi0+c2lmLT5zbGNfd2luZG93X2VuZF9hZGRyIC0gbGVuOworCQlmbGFncyA9IFNJRl9U T19ERVZJQ0UgfCBTSUZfQllURV9CQVNJUyB8IFNJRl9JTkNfQUREUjsKKwl9CisKKwlpZiAoc3lu YykKKwkJcmV0dXJuIHNpZl9pb19zeW5jKGVwdWIsIGFkZHIsIGJ1ZiwgcmVhZF9sZW4sIGZsYWdz KTsKKwlyZXR1cm4gc2lmX2lvX3JhdyhlcHViLCBhZGRyLCBidWYsIHJlYWRfbGVuLCBmbGFncyk7 Cit9CisKK2ludCBzaWZfbGxkZXNjX3JlYWRfc3luYyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTgg KmJ1ZiwgdTMyIGxlbikKK3sKKwlyZXR1cm4gc2lmX2xsZGVzYyhlcHViLCBidWYsIGxlbiwgdHJ1 ZSwgdHJ1ZSwgZmFsc2UpOworfQorCitpbnQgc2lmX2xsZGVzY193cml0ZV9zeW5jKHN0cnVjdCBl c3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuKQoreworCXJldHVybiBzaWZfbGxkZXNjKGVw dWIsIGJ1ZiwgbGVuLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworfQorCitpbnQgc2lmX2xsZGVzY19y ZWFkX3JhdyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbiwgYm9vbCBub3Jv dW5kKQoreworCXJldHVybiBzaWZfbGxkZXNjKGVwdWIsIGJ1ZiwgbGVuLCBmYWxzZSwgdHJ1ZSwg bm9yb3VuZCk7Cit9CisKK2ludCBzaWZfbGxkZXNjX3dyaXRlX3JhdyhzdHJ1Y3QgZXNwX3B1YiAq ZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbikKK3sKKwlyZXR1cm4gc2lmX2xsZGVzYyhlcHViLCBidWYs IGxlbiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Cit9CisKKyNkZWZpbmUgTUFOVUZBQ1RVUkVSX0lE X0VBR0xFX0JBU0UgICAgICAgIDB4MTExMAorI2RlZmluZSBNQU5VRkFDVFVSRVJfQ09ERSAgICAg ICAgICAgICAgICAgIDB4NjY2NgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lk IGVzcF9zZGlvX2RldmljZXNbXSA9IHsKKwl7U0RJT19ERVZJQ0UoTUFOVUZBQ1RVUkVSX0NPREUs IChNQU5VRkFDVFVSRVJfSURfRUFHTEVfQkFTRSB8IDB4MSkpfSwKKwl7fSwKK307CisKK3N0YXRp YyBpbnQgZXNkaW9fcG93ZXIoc3RydWN0IGVzcF9zZGlvX2N0cmwgKnNjdHJsLCBib29sIHBvd2Vy X29uKQoreworCWludCBlcnI7CisKKwlpZiAoc2N0cmwtPm9mZiAhPSBwb3dlcl9vbikKKwkJcmV0 dXJuIDA7CisKKwlzZGlvX2NsYWltX2hvc3Qoc2N0cmwtPmZ1bmMpOworCisJaWYgKHBvd2VyX29u KQorCQllcnIgPSBzZGlvX2VuYWJsZV9mdW5jKHNjdHJsLT5mdW5jKTsKKwllbHNlCisJCWVyciA9 IHNkaW9fZGlzYWJsZV9mdW5jKHNjdHJsLT5mdW5jKTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KHNj dHJsLT5mdW5jKTsKKworCWlmIChlcnIpIHsKKwkJZGV2X2VycihzY3RybC0+ZXB1Yi0+ZGV2LCAi dW5hYmxlIHRvIGVuYWJsZSBzZGlvIGZ1bmM6ICVkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVy cjsKKwl9CisKKwkvKiBlbnN1cmUgZGV2aWNlIGlzIHVwICovCisJaWYgKHBvd2VyX29uKQorCQlt c2xlZXAoNSk7CisKKwlzY3RybC0+b2ZmID0gIXNjdHJsLT5vZmY7CisKKwlyZXR1cm4gZXJyOwor fQorCitzdGF0aWMgaW50IGVzZGlvX3Bvd2VyX29uKHN0cnVjdCBlc3Bfc2Rpb19jdHJsICpzY3Ry bCkKK3sKKwlyZXR1cm4gZXNkaW9fcG93ZXIoc2N0cmwsIHRydWUpOworfQorCitzdGF0aWMgaW50 IGVzZGlvX3Bvd2VyX29mZihzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2N0cmwpCit7CisJcmV0dXJu IGVzZGlvX3Bvd2VyKHNjdHJsLCBmYWxzZSk7Cit9CisKK3ZvaWQgc2lmX2VuYWJsZV9pcnEoc3Ry dWN0IGVzcF9wdWIgKmVwdWIpCit7CisJc2Rpb19jbGFpbV9ob3N0KGVwdWItPnNpZi0+ZnVuYyk7 CisKKwlpZiAoc2Rpb19jbGFpbV9pcnEoZXB1Yi0+c2lmLT5mdW5jLCBzaWZfZHNyKSkKKwkJZGV2 X2VycihlcHViLT5kZXYsICJzaWYgJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlhdG9taWNf c2V0KCZlcHViLT5zaXAtPnN0YXRlLCBTSVBfQk9PVCk7CisJYXRvbWljX3NldCgmZXB1Yi0+c2lm LT5pcnFfaW5zdGFsbGVkLCAxKTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGVwdWItPnNpZi0+ZnVu Yyk7Cit9CisKK3ZvaWQgc2lmX2Rpc2FibGVfaXJxKHN0cnVjdCBlc3BfcHViICplcHViKQorewor CWludCBpID0gMDsKKworCWlmICghYXRvbWljX3JlYWQoJmVwdWItPnNpZi0+aXJxX2luc3RhbGxl ZCkpCisJCXJldHVybjsKKworCXNkaW9fY2xhaW1faG9zdChlcHViLT5zaWYtPmZ1bmMpOworCisJ d2hpbGUgKGF0b21pY19yZWFkKCZlcHViLT5zaWYtPmlycV9oYW5kbGluZykpIHsKKwkJc2Rpb19y ZWxlYXNlX2hvc3QoZXB1Yi0+c2lmLT5mdW5jKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEw MCk7CisJCXNkaW9fY2xhaW1faG9zdChlcHViLT5zaWYtPmZ1bmMpOworCQlpZiAoaSsrID49IDQw MCkKKwkJCWJyZWFrOworCX0KKworCS8qIElnbm9yZSBlcnJvcnMsIHdlIGRvbid0IGFsd2F5cyB1 c2UgYW4gaXJxLiAqLworCXNkaW9fcmVsZWFzZV9pcnEoZXB1Yi0+c2lmLT5mdW5jKTsKKworCWF0 b21pY19zZXQoJmVwdWItPnNpZi0+aXJxX2luc3RhbGxlZCwgMCk7CisJc2Rpb19yZWxlYXNlX2hv c3QoZXB1Yi0+c2lmLT5mdW5jKTsKK30KKwordm9pZCBzaWZfc2V0X2Nsb2NrKHN0cnVjdCBzZGlv X2Z1bmMgKmZ1bmMsIGludCBjbGspCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gZnVuYy0+ Y2FyZC0+aG9zdDsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKworCS8vY3VycmVudGx5IG9u bHkgc2V0IGNsb2NrCisJaG9zdC0+aW9zLmNsb2NrID0gY2xrICogMTAwMDAwMDsKKworCWlmICho b3N0LT5pb3MuY2xvY2sgPiBob3N0LT5mX21heCkKKwkJaG9zdC0+aW9zLmNsb2NrID0gaG9zdC0+ Zl9tYXg7CisKKwlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisKKwltZGVs YXkoMik7CisKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKworc3RhdGljIHZvaWQgZXNw X3NkaW9fcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpOworCitzdGF0aWMgaW50IGVzcF9z ZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCisJCQkgIGNvbnN0IHN0cnVjdCBzZGlv X2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGVzcF9wdWIgKmVwdWI7CisJc3RydWN0IGVzcF9z ZGlvX2N0cmwgKnNjdHJsOworCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGZ1bmMtPmNhcmQtPmhv c3Q7CisJaW50IGVycjsKKworCWlmICghc2lmX3NjdHJsKSB7CisJCXJlcXVlc3RfaW5pdF9jb25m KCZmdW5jLT5kZXYpOworCisJCXNjdHJsID0ga3phbGxvYyhzaXplb2YoKnNjdHJsKSwgR0ZQX0tF Uk5FTCk7CisJCWlmICghc2N0cmwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKiB0ZW1wIGJ1 ZmZlciByZXNlcnZlZCBmb3IgdW4tZG1hLWFibGUgcmVxdWVzdCAqLworCQlzY3RybC0+ZG1hX2J1 ZmZlciA9IGt6YWxsb2MoRVNQX0RNQV9JQlVGU1osIEdGUF9LRVJORUwpOworCQlpZiAoIXNjdHJs LT5kbWFfYnVmZmVyKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBfZXJyX2xhc3Q7CisJ CX0KKworCQlzaWZfc2N0cmwgPSBzY3RybDsKKwkJc2N0cmwtPnNsY19ibGtfc3ogPSBTSUZfU0xD X0JMT0NLX1NJWkU7CisKKwkJZXB1YiA9IGVzcF9wdWJfYWxsb2NfbWFjODAyMTEoJmZ1bmMtPmRl dik7CisJCWlmICghZXB1YikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gX2Vycl9kbWE7 CisJCX0KKworCQllcHViLT5zaWYgPSBzY3RybDsKKwkJZXB1Yi0+c2Rpb19zdGF0ZSA9IEVTUF9T RElPX1NUQVRFX0ZJUlNUX0lOSVQ7CisJCXNjdHJsLT5lcHViID0gZXB1YjsKKwl9IGVsc2Ugewor CQkvKiBGSVhNRTogd2h5IGR1cGxpY2F0aW5nIHNjdHJsIGFuZCBzaWZfc2N0cmw/ICovCisJCXNj dHJsID0gc2lmX3NjdHJsOworCQlzaWZfc2N0cmwgPSBOVUxMOworCQllcHViID0gc2N0cmwtPmVw dWI7CisJCWVwdWItPnNkaW9fc3RhdGUgPSBFU1BfU0RJT19TVEFURV9TRUNPTkRfSU5JVDsKKwkJ LyogRklYTUU6IGFscmVhZHkgZG9uZSBpbiBlc3BfcHViX2FsbG9jX21hYzgwMjExIHdoaWNoIGlz IGNhbGxlZCBvbiBmaXJzdCBwcm9iZSAqLworCQlTRVRfSUVFRTgwMjExX0RFVihlcHViLT5odywg JmZ1bmMtPmRldik7CisJCWVwdWItPmRldiA9ICZmdW5jLT5kZXY7CisJfQorCisJc2N0cmwtPmZ1 bmMgPSBmdW5jOworCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgc2N0cmwpOworCXNjdHJsLT5pZCA9 IGlkOworCXNjdHJsLT5vZmYgPSB0cnVlOworCisJLyogZ2l2ZSB1cyBzb21lIHRpbWUgdG8gZW5h YmxlLCBpbiBtcyAqLworCWZ1bmMtPmVuYWJsZV90aW1lb3V0ID0gMTAwOworCisJZXJyID0gZXNk aW9fcG93ZXJfb24oc2N0cmwpOworCWlmIChlcnIpIHsKKwkJaWYgKGVwdWItPnNkaW9fc3RhdGUg PT0gRVNQX1NESU9fU1RBVEVfRklSU1RfSU5JVCkKKwkJCWdvdG8gX2Vycl9leHRfZ3BpbzsKKwor CQlnb3RvIF9lcnJfc2Vjb25kX2luaXQ7CisJfQorCisJY2hlY2tfdGFyZ2V0X2lkKGVwdWIpOwor CisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCisJZXJyID0gc2Rpb19zZXRfYmxvY2tfc2l6ZShm dW5jLCBzY3RybC0+c2xjX2Jsa19zeik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGVwdWItPmRl diwgIlNldCBzZGlvIGJsb2NrIHNpemUgJWQgZmFpbGVkOiAlZClcbiIsCisJCQlzY3RybC0+c2xj X2Jsa19zeiwgZXJyKTsKKworCQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKwkJaWYgKGVwdWIt PnNkaW9fc3RhdGUgPT0gRVNQX1NESU9fU1RBVEVfRklSU1RfSU5JVCkKKwkJCWdvdG8gX2Vycl9v ZmY7CisKKwkJZ290byBfZXJyX3NlY29uZF9pbml0OworCX0KKworCXNkaW9fcmVsZWFzZV9ob3N0 KGZ1bmMpOworCisjaWZkZWYgTE9XRVJfQ0xLCisJLyogZml4IGNsb2NrIGZvciBkb25nbGUgKi8K KwlzaWZfc2V0X2Nsb2NrKGZ1bmMsIDIzKTsKKyNlbmRpZgkJCQkvL0xPV0VSX0NMSworCisJZXJy ID0gZXNwX3B1Yl9pbml0X2FsbChlcHViKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZXB1Yi0+ ZGV2LCAiZXNwX2luaXRfYWxsIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWlmIChlcHViLT5zZGlv X3N0YXRlID09IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpIHsKKwkJCWVyciA9IDA7CisJCQln b3RvIF9lcnJfZmlyc3RfaW5pdDsKKwkJfQorCisJCWlmIChlcHViLT5zZGlvX3N0YXRlID09IEVT UF9TRElPX1NUQVRFX1NFQ09ORF9JTklUKQorCQkJZ290byBfZXJyX3NlY29uZF9pbml0OworCX0K KworCWlmIChlcHViLT5zZGlvX3N0YXRlID09IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpIHsK KwkJZXB1Yi0+c2Rpb19zdGF0ZSA9IEVTUF9TRElPX1NUQVRFX0ZJUlNUX05PUk1BTF9FWElUOwor CQkvKiBSZXNjYW4gdGhlIGVzcDgwODkgYWZ0ZXIgbG9hZGluZyB0aGUgaW5pdGlhbCBmaXJtd2Fy ZSAqLworCQltbWNfZm9yY2VfZGV0ZWN0X2NoYW5nZShob3N0LCBtc2Vjc190b19qaWZmaWVzKDEw MCksIHRydWUpOworCX0KKworCXJldHVybiBlcnI7CisKK19lcnJfb2ZmOgorCWVzZGlvX3Bvd2Vy X29mZihzY3RybCk7CisKK19lcnJfZXh0X2dwaW86CisJZXNwX3B1Yl9kZWFsbG9jX21hYzgwMjEx KGVwdWIpOworCitfZXJyX2RtYToKKwlrZnJlZShzY3RybC0+ZG1hX2J1ZmZlcik7CisKK19lcnJf bGFzdDoKKwlrZnJlZShzY3RybCk7CisKK19lcnJfZmlyc3RfaW5pdDoKKwlpZiAoZXB1YiAmJiBl cHViLT5zZGlvX3N0YXRlID09IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpCisJCWVwdWItPnNk aW9fc3RhdGUgPSBFU1BfU0RJT19TVEFURV9GSVJTVF9FUlJPUl9FWElUOworCisJcmV0dXJuIGVy cjsKKworX2Vycl9zZWNvbmRfaW5pdDoKKwllcHViLT5zZGlvX3N0YXRlID0gRVNQX1NESU9fU1RB VEVfU0VDT05EX0VSUk9SX0VYSVQ7CisJZXNwX3NkaW9fcmVtb3ZlKGZ1bmMpOworCisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIHZvaWQgZXNwX3NkaW9fcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMg KmZ1bmMpCit7CisJc3RydWN0IGVzcF9zZGlvX2N0cmwgKnNjdHJsID0gc2Rpb19nZXRfZHJ2ZGF0 YShmdW5jKTsKKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YjsKKworCWlmICghc2N0cmwpIHsKKwkJcmV0 dXJuOworCX0KKworCWVwdWIgPSBzY3RybC0+ZXB1YjsKKwlpZiAoIWVwdWIpIHsKKwkJZ290byBf b3V0OworCX0KKworCWlmIChlcHViLT5zZGlvX3N0YXRlICE9IEVTUF9TRElPX1NUQVRFX0ZJUlNU X05PUk1BTF9FWElUKSB7CisJCWlmIChlcHViLT5zaXApIHsKKwkJCXNpcF9kZXRhY2goZXB1Yi0+ c2lwKTsKKwkJCWVwdWItPnNpcCA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlhdG9taWNfc2V0 KCZlcHViLT5zaXAtPnN0YXRlLCBTSVBfU1RPUCk7CisJCXNpZl9kaXNhYmxlX2lycShlcHViKTsK Kwl9CisKKwlpZiAoZXB1Yi0+c2Rpb19zdGF0ZSAhPSBFU1BfU0RJT19TVEFURV9GSVJTVF9OT1JN QUxfRVhJVCkgeworCQllc3BfcHViX2RlYWxsb2NfbWFjODAyMTEoZXB1Yik7CisKKwkJa2ZyZWUo c2N0cmwtPmRtYV9idWZmZXIpOworCQlzY3RybC0+ZG1hX2J1ZmZlciA9IE5VTEw7CisKKwkJa2Zy ZWUoc2N0cmwpOworCX0KKworX291dDoKKwlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIE5VTEwpOwor fQorCitNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIGVzcF9zZGlvX2RldmljZXMpOworCitzdGF0 aWMgaW50IGVzcF9zZGlvX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBz ZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7CisJc3RydWN0IGVzcF9zZGlv X2N0cmwgKnNjdHJsID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwlzdHJ1Y3QgZXNwX3B1YiAq ZXB1YiA9IHNjdHJsLT5lcHViOworCXUzMiBzZGlvX2ZsYWdzOworCisJcHJpbnRrKCIlcyIsIF9f ZnVuY19fKTsKKwlhdG9taWNfc2V0KCZlcHViLT5wcy5zdGF0ZSwgRVNQX1BNX09OKTsKKworCXNk aW9fZmxhZ3MgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7CisKKwlpZiAoIShzZGlvX2Zs YWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKQorCQlwcmludGsoIiVzIGNhbid0IGtlZXAgcG93ZXIg d2hpbGUgaG9zdCBpcyBzdXNwZW5kZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkvKiBr ZWVwIHBvd2VyIHdoaWxlIGhvc3Qgc3VzcGVuZGVkICovCisJaWYgKHNkaW9fc2V0X2hvc3RfcG1f ZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpKQorCQlwcmludGsoIiVzIGVycm9yIHdoaWxl IHRyeWluZyB0byBrZWVwIHBvd2VyXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBlc3Bfc2Rpb19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZXNwX3NkaW9fcG1fb3Bz ID0geworCS5zdXNwZW5kID0gZXNwX3NkaW9fc3VzcGVuZCwKKwkucmVzdW1lID0gZXNwX3NkaW9f cmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBlc3Bfc2Rpb19kcml2ZXIg PSB7CisJLm5hbWUgPSAiZWFnbGVfc2RpbyIsCisJLmlkX3RhYmxlID0gZXNwX3NkaW9fZGV2aWNl cywKKwkucHJvYmUgPSBlc3Bfc2Rpb19wcm9iZSwKKwkucmVtb3ZlID0gZXNwX3NkaW9fcmVtb3Zl LAorCS5kcnYgPSB7LnBtID0gJmVzcF9zZGlvX3BtX29wcyx9LAorfTsKKworc3RhdGljIGludCAv Kl9faW5pdCovIGVzcF9zZGlvX2luaXQodm9pZCkKK3sKKwllc3BfZGVidWdmc19pbml0KCk7CisJ c2Rpb19yZWdpc3Rlcl9kcml2ZXIoJmVzcF9zZGlvX2RyaXZlcik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgLypfX2V4aXQqLyBlc3Bfc2Rpb19leGl0KHZvaWQpCit7CisJc2Rpb191 bnJlZ2lzdGVyX2RyaXZlcigmZXNwX3NkaW9fZHJpdmVyKTsKKwllc3BfZGVidWdmc19leGl0KCk7 Cit9CisKK21vZHVsZV9pbml0KGVzcF9zZGlvX2luaXQpOworbW9kdWxlX2V4aXQoZXNwX3NkaW9f ZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkVzcHJlc3NpZiBTeXN0ZW0iKTsKK01PRFVMRV9ERVND UklQVElPTgorKCJEcml2ZXIgZm9yIFNESU8gaW50ZXJjb25uZWN0ZWQgZWFnbGUgbG93LXBvd2Vy IFdMQU4gZGV2aWNlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL2VzcDgwODkvc2lwMl9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L3NpcDJfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li41ZGZiOGM0OTIyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4 OS9zaXAyX2NvbW1vbi5oCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDEwIC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgorICogQ29weXJpZ2h0IChjKSAyMDE3IEZyZWUg RWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVs ZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBf U0lQMl9DT01NT05fSAorI2RlZmluZSBfU0lQMl9DT01NT05fSAorCisvKiBtYXggMTYgdHlwZXMg Ki8KK2VudW0gc2lwX3R5cGUgeworCVNJUF9DVFJMID0gMCwKKwlTSVBfREFUQSwKKwlTSVBfREFU QV9BTVBEVQorfTsKKworZW51bSBzaXBfYnVmX3R5cGUgeworCVNJUF9UWF9DVFJMX0JVRiA9IDAs CS8qIGZyb20gaG9zdCAqLworCVNJUF9SWF9DVFJMX0JVRiwJLyogdG8gaG9zdCAqLworCVNJUF9U WF9EQVRBX0JVRiwJLyogZnJvbSBob3N0ICovCisJU0lQX1JYX0RBVEFfQlVGCQkvKiB0byBob3N0 ICovCit9OworCitlbnVtIHNpcF9jbWRfaWQgeworCVNJUF9DTURfR0VUX1ZFUiA9IDAsCisJU0lQ X0NNRF9XUklURV9NRU1PUlksCS8vMSBST00gY29kZQorCVNJUF9DTURfUkVBRF9NRU1PUlksCS8v MgorCVNJUF9DTURfV1JJVEVfUkVHLAkvLzMgUk9NIGNvZGUKKwlTSVBfQ01EX1JFQURfUkVHLAkv LzQKKwlTSVBfQ01EX0JPT1RVUCwJCS8vNSBST00gY29kZQorCVNJUF9DTURfQ09QWUJBQ0ssCS8v NgorCVNJUF9DTURfSU5JVCwJCS8vNworCVNJUF9DTURfU0NBTiwJCS8vOAorCVNJUF9DTURfU0VU S0VZLAkJLy85CisJU0lQX0NNRF9DT05GSUcsCQkvLzEwCisJU0lQX0NNRF9CU1NfSU5GT19VUERB VEUsCS8vMTEKKwlTSVBfQ01EX0xPT1BCQUNLLAkvLzEyICBST00gY29kZQorCS8vZG8gbm90IGFk ZCBjbWQgYmVmb3JlIHRoaXMgbGluZQorCVNJUF9DTURfU0VUX1dNTV9QQVJBTSwKKwlTSVBfQ01E X0FNUERVX0FDVElPTiwKKwlTSVBfQ01EX0hCX1JFUSwJCS8vMTUKKwlTSVBfQ01EX1JFU0VUX01B QywJLy8xNgorCVNJUF9DTURfUFJFX0RPV04sCS8vMTcKKwlTSVBfQ01EX1NMRUVQLAkJLyogZm9y IHNsZWVwIHRlc3RpbmcgKi8KKwlTSVBfQ01EX1dBS0VVUCwJCS8qIGZvciBzbGVlcCB0ZXN0aW5n ICovCisJU0lQX0NNRF9ERUJVRywJCS8qIGZvciBnZW5lcmFsIHRlc3RpbmcgKi8KKwlTSVBfQ01E X0dFVF9GV19WRVIsCS8qIGdldCBmdyByZXYuICovCisJU0lQX0NNRF9TRVRWSUYsCisJU0lQX0NN RF9TRVRTVEEsCisJU0lQX0NNRF9QUywKKwlTSVBfQ01EX0FURSwKKwlTSVBfQ01EX1NVU1BFTkQs CisJU0lQX0NNRF9SRUNBTENfQ1JFRElULAorCVNJUF9DTURfTUFYLAorfTsKKworZW51bSB7CisJ U0lQX0VWVF9UQVJHRVRfT04gPSAwLAkvLworCVNJUF9FVlRfQk9PVFVQLAkJLy8xIGluIFJPTSBj b2RlCisJU0lQX0VWVF9DT1BZQkFDSywJLy8yCisJU0lQX0VWVF9TQ0FOX1JFU1VMVCwJLy8zCisJ U0lQX0VWVF9UWF9TVEFUVVMsCS8vNAorCVNJUF9FVlRfQ1JFRElUX1JQVCwJLy81LCBpbiBST00g Y29kZQorCVNJUF9FVlRfRVJST1IsCQkvLzYKKwlTSVBfRVZUX0xPT1BCQUNLLAkvLzcsIGluIFJP TSBjb2RlCisJU0lQX0VWVF9TTlBSSU5URl9UT19IT1NULAkvLzggIGluIFJPTSBjb2RlCisJLy9k byBub3QgYWRkIGV2dCBiZWZvcmUgdGhpcyBsaW5lCisJU0lQX0VWVF9IQl9BQ0ssCQkvLzkKKwlT SVBfRVZUX1JFU0VUX01BQ19BQ0ssCS8vMTAKKwlTSVBfRVZUX1dBS0VVUCwJCS8vMTEgICAgICAg IC8qIGZvciBzbGVlcCB0ZXN0aW5nICovCisJU0lQX0VWVF9ERUJVRywJCS8vMTIgICAgICAgICAg LyogZm9yIGdlbmVyYWwgdGVzdGluZyAqLworCVNJUF9FVlRfUFJJTlRfVE9fSE9TVCwJLy8xMwor CVNJUF9FVlRfVFJDX0FNUERVLAkvLzE0CisJU0lQX0VWVF9ST0MsCQkvLzE1CisJU0lQX0VWVF9S RVNFVFRJTkcsCisJU0lQX0VWVF9BVEUsCisJU0lQX0VWVF9FUCwKKwlTSVBfRVZUX0lOSVRfRVAs CisJU0lQX0VWVF9TTEVFUCwKKwlTSVBfRVZUX1RYSURMRSwKKwlTSVBfRVZUX05PSVNFRkxPT1Is CisJU0lQX0VWVF9NQVgKK307CisKKyNkZWZpbmUgU0lQX0lGSURYX01BU0sJMHhmMAorI2RlZmlu ZSBTSVBfSUZJRFhfUwk0CisjZGVmaW5lIFNJUF9UWVBFX01BU0sJMHgwZgorI2RlZmluZSBTSVBf VFlQRV9TCTAKKworI2RlZmluZSBTSVBfSERSX0dFVF9JRklEWChmYzApICgoKGZjMCkgJiBTSVBf SUZJRFhfTUFTSykgPj4gU0lQX0lGSURYX1MpCisjZGVmaW5lIFNJUF9IRFJfU0VUX0lGSURYKGZj MCwgaWZpZHgpICgoZmMwKSA9ICgoZmMwKSAmIH5TSVBfSUZJRFhfTUFTSykgfCAoKGlmaWR4KSA8 PCBTSVBfSUZJRFhfUyAmIFNJUF9JRklEWF9NQVNLKSkKKyNkZWZpbmUgU0lQX0hEUl9HRVRfVFlQ RShmYzApICgoZmMwKSAmIFNJUF9UWVBFX01BU0spCisvKiBhc3N1bWUgdHlwZSBmaWVsZCBpcyBj bGVhcmVkICovCisjZGVmaW5lIFNJUF9IRFJfU0VUX1RZUEUoZmMwLCB0eXBlKSAoKGZjMCkgPSAo KGZjMCkgJiB+U0lQX1RZUEVfTUFTSykgfCAoKHR5cGUpICYgU0lQX1RZUEVfTUFTSykpCisKKy8q IHNpcCAyLjAsIG5vdCBoeWJyaWQgaGVhZGVyIHNvIGZhciAqLworI2RlZmluZSBTSVBfSERSX0lT X0NUUkwoaGRyKSAoU0lQX0hEUl9HRVRfVFlQRSgoaGRyKS0+ZmNbMF0pID09IFNJUF9DVFJMKQor I2RlZmluZSBTSVBfSERSX0lTX0RBVEEoaGRyKSAoU0lQX0hEUl9HRVRfVFlQRSgoaGRyKS0+ZmNb MF0pID09IFNJUF9EQVRBKQorI2RlZmluZSBTSVBfSERSX0lTX0FNUERVKGhkcikgKFNJUF9IRFJf R0VUX1RZUEUoKGhkciktPmZjWzBdKSA9PSBTSVBfREFUQV9BTVBEVSkKKworLyogZmNbMV0gZmxh Z3MsIG9ubHkgZm9yIGRhdGEgcGt0LiBDdHJsIHBrdHMgdXNlIGZjWzFdIGFzIGV2ZW50SUQgKi8K KyNkZWZpbmUgU0lQX0hEUl9TRVRfRkxBR1MoaGRyLCBmbGFncykgKChoZHIpLT5mY1sxXSB8PSAo ZmxhZ3MpKQorI2RlZmluZSBTSVBfSERSX0ZfTU9SRV9QS1QJCTB4MQorI2RlZmluZSBTSVBfSERS X0ZfTkVFRF9DUkRUX1JQVAkJMHgyCisjZGVmaW5lIFNJUF9IRFJfRl9TWU5DCQkJMHg0CisjZGVm aW5lIFNJUF9IRFJfRl9TWU5DX1JFU0VUCQkweDgKKyNkZWZpbmUgU0lQX0hEUl9GX1BNX1RVUk5J TkdfT04JCTB4MTAKKyNkZWZpbmUgU0lQX0hEUl9GX1BNX1RVUk5JTkdfT0ZGCTB4MjAKKworI2Rl ZmluZSBTSVBfSERSX05FRURfQ1JFRElUX1VQREFURShoZHIpICgoaGRyKS0+ZmNbMV0gJiBTSVBf SERSX0ZfTkVFRF9DUkRUX1JQVCkKKyNkZWZpbmUgU0lQX0hEUl9JU19NT1JFX1BLVChoZHIpICgo aGRyKS0+ZmNbMV0gJiBTSVBfSERSX0ZfTU9SRV9QS1QpCisjZGVmaW5lIFNJUF9IRFJfSVNfQ1JE VF9SUFQoaGRyKSAoKGhkciktPmZjWzFdICYgU0lQX0hEUl9GX0NSRFRfUlBUKQorI2RlZmluZSBT SVBfSERSX0lTX1NZTkMoaGRyKSAoKGhkciktPmZjWzFdICYgU0lQX0hEUl9GX1NZTkMpCisjZGVm aW5lIFNJUF9IRFJfSVNfU1lOQ19SRVNFVChoZHIpICgoaGRyKS0+ZmNbMV0gJiBTSVBfSERSX0Zf U1lOQ19SRVNFVCkKKyNkZWZpbmUgU0lQX0hEUl9JU19TWU5DX1BLVChoZHIpIChTSVBfSERSX0lT X1NZTkMoaGRyKSB8IFNJUF9IRFJfSVNfU1lOQ19SRVNFVChoZHIpKQorI2RlZmluZSBTSVBfSERS X1NFVF9TWU5DKGhkcikgU0lQX0hEUl9TRVRfRkxBR1MoKGhkciksIFNJUF9IRFJfRl9TWU5DKQor I2RlZmluZSBTSVBfSERSX1NFVF9TWU5DX1JFU0VUKGhkcikgU0lQX0hEUl9TRVRfRkxBR1MoKGhk ciksIFNJUF9IRFJfRl9TWU5DX1JFU0VUKQorI2RlZmluZSBTSVBfSERSX1NFVF9NT1JFX1BLVCho ZHIpIFNJUF9IRFJfU0VUX0ZMQUdTKChoZHIpLCBTSVBfSERSX0ZfTU9SRV9QS1QpCisjZGVmaW5l IFNJUF9IRFJfU0VUX1BNX1RVUk5JTkdfT04oaGRyKSBTSVBfSERSX1NFVF9GTEFHUygoaGRyKSwg U0lQX0hEUl9GX1BNX1RVUk5JTkdfT04pCisjZGVmaW5lIFNJUF9IRFJfSVNfUE1fVFVSTklOR19P TihoZHIpICgoaGRyKS0+ZmNbMV0gJiBTSVBfSERSX0ZfUE1fVFVSTklOR19PTikKKyNkZWZpbmUg U0lQX0hEUl9TRVRfUE1fVFVSTklOR19PRkYoaGRyKSBTSVBfSERSX1NFVF9GTEFHUygoaGRyKSwg U0lQX0hEUl9GX1BNX1RVUk5JTkdfT0ZGKQorI2RlZmluZSBTSVBfSERSX0lTX1BNX1RVUk5JTkdf T0ZGKGhkcikgKChoZHIpLT5mY1sxXSAmIFNJUF9IRFJfRl9QTV9UVVJOSU5HX09GRikKKworLyog ZmNbMF06IGZpcnN0IDRiaXQ6IGlmaWR4OyBsYXN0IDRiaXQ6IHR5cGUKKyAqIGZjWzFdOiBmbGFn cworICoKKyAqICAgRG9uJ3QgdG91Y2ggdGhlIGhlYWRlciBkZWZpbml0b25zCisgKi8KK3N0cnVj dCBzaXBfaGRyX21pbiB7CisJdTggZmNbMl07CisJX19sZTE2IGxlbjsKK30gX19wYWNrZWQ7CisK Ky8qIG5vdCBtb3JlIHRoYW4gNGJ5dGUgbG9uZyAqLworc3RydWN0IHNpcF90eF9kYXRhX2luZm8g eworCXU4IHRpZDsKKwl1OCBhYzsKKwl1OCBwMnA6MSwgZW5jX2ZsYWc6NzsKKwl1OCBod19raWQ7 Cit9IF9fcGFja2VkOworCisvKiBOQjogdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIG5vdCBtb3Jl IHRoYW4gNGJ5dGUgISEgKi8KK3N0cnVjdCBzaXBfdHhfaW5mbyB7CisJdW5pb24geworCQl1MzIg Y21kaWQ7CisJCXN0cnVjdCBzaXBfdHhfZGF0YV9pbmZvIGRpbmZvOworCX0gdTsKK30gX19wYWNr ZWQ7CisKK3N0cnVjdCBzaXBfaGRyIHsKKwl1OCBmY1syXTsJCS8vZmNbMF06IHR5cGUgYW5kIGlm aWR4IDsgZmNbMV0gaXMgZXZlbnRJRCBpZiB0aGUgZmlyc3QgY3RybCBwa3QgaW4gdGhlIGNoYWlu LiBkYXRhIHBrdCBzdGlsbCBjYW4gdXNlIGZjWzFdIHRvIHNldCBmbGFnCisJX19sZTE2IGxlbjsK Kwl1bmlvbiB7CisJCXZvbGF0aWxlIHUzMiByZWN5Y2xlZF9jcmVkaXRzOwkvKiBsYXN0IDEyYml0 cyBpcyBjcmVkaXRzLCBmaXJzdCAyMCBiaXRzIGlzIGFjdHVhbCBsZW5ndGggb2YgdGhlIGZpcnN0 IHBrdCBpbiB0aGUgY2hhaW4gKi8KKwkJc3RydWN0IHNpcF90eF9pbmZvIHR4X2luZm87CisJfSB1 OworCXUzMiBzZXE7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIGhfY3JlZGl0cyB1LnJlY3ljbGVk X2NyZWRpdHMKKyNkZWZpbmUgY19ldnRpZCBmY1sxXQorI2RlZmluZSBjX2NtZGlkIHUudHhfaW5m by51LmNtZGlkCisjZGVmaW5lIGRfYWMgdS50eF9pbmZvLnUuZGluZm8uYWMKKyNkZWZpbmUgZF90 aWQgIHUudHhfaW5mby51LmRpbmZvLnRpZAorI2RlZmluZSBkX3AycCAgIHUudHhfaW5mby51LmRp bmZvLnAycAorI2RlZmluZSBkX2VuY19mbGFnIHUudHhfaW5mby51LmRpbmZvLmVuY19mbGFnCisj ZGVmaW5lIGRfaHdfa2lkICAgdS50eF9pbmZvLnUuZGluZm8uaHdfa2lkCisKKyNkZWZpbmUgU0lQ X0NSRURJVFNfTUFTSyAgMHhmZmYJLyogbGFzdCAxMiBiaXRzICovCisKKyNkZWZpbmUgU0lQX0hE Ul9NSU5fTEVOCQk0CisjZGVmaW5lIFNJUF9IRFJfTEVOCQlzaXplb2Yoc3RydWN0IHNpcF9oZHIp CisjZGVmaW5lIFNJUF9DVFJMX0hEUl9MRU4JU0lQX0hEUl9MRU4JLyogc2FtZSBhcyBzaXBfaGRy IGluIHNpcDIgZGVzaWduICovCisjZGVmaW5lIFNJUF9CT09UX0JVRl9TSVpFCTI1NgorI2RlZmlu ZSBTSVBfQ1RSTF9CVUZfU1oJCTI1NgkvKiB0b28gbXVjaD8/ICovCisjZGVmaW5lIFNJUF9DVFJM X0JVRl9OCQk2CisjZGVmaW5lIFNJUF9DVFJMX1RYQlVGX04JMgorI2RlZmluZSBTSVBfQ1RSTF9S WEJVRl9OCTQKKworLyogV0FSIGZvciBtYmxrICovCisjZGVmaW5lIFNJUF9SWF9BRERSX1BSRUZJ WF9NQVNLCTB4ZmMwMDAwMDAKKyNkZWZpbmUgU0lQX1JYX0FERFJfU0hJRlQJNgkvKiBbMzE6NV0s ICBzaGlmdCA2IGJpdHMgKi8KKworc3RydWN0IHNpcF9jbWRfd3JpdGVfbWVtb3J5IHsKKwl1MzIg YWRkcjsKKwl1MzIgbGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9jbWRfcmVhZF9tZW1v cnkgeworCXUzMiBhZGRyOworCXUzMiBsZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2lwX2Nt ZF93cml0ZV9yZWcgeworCXUzMiBhZGRyOworCXUzMiB2YWw7Cit9IF9fcGFja2VkOworCitzdHJ1 Y3Qgc2lwX2NtZF9ib290dXAgeworCXUzMiBib290X2FkZHI7Cit9IF9fcGFja2VkOworCitzdHJ1 Y3Qgc2lwX2NtZF9sb29wYmFjayB7CisJdTMyIHR4bGVuOwkJLy9ob3N0IHRvIHRhcmdldCBwYWNr ZXQgbGVuLCAwIG1lYW5zIG5vIHR4cGFja2V0CisJdTMyIHJ4bGVuOwkJLy90YXJnZXQgdG8gaG9z dCBwYWNrZXQgbGVuLCAwIG1lYW5zIG5vIHJ4cGFja2V0CisJdTMyIHBhY2tfaWQ7CQkvL3NlcXVl bmNlIG9mIHBhY2tldAorfSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9ldnRfbG9vcGJhY2sgewor CXUzMiB0eGxlbjsJCS8vaG9zdCB0byB0YXJnZXQgcGFja2V0IGxlbiwgMCBtZWFucyBubyB0eHBh Y2tldAorCXUzMiByeGxlbjsJCS8vdGFyZ2V0IHRvIGhvc3QgcGFja2V0IGxlbiwgMCBtZWFucyBu byByeHBhY2tldAorCXUzMiBwYWNrX2lkOwkJLy9zZXF1ZW5jZSBvZiBwYWNrZXQKK30gX19wYWNr ZWQ7CisKK3N0cnVjdCBzaXBfY21kX2NvcHliYWNrIHsKKwl1MzIgYWRkcjsKKwl1MzIgbGVuOwor fSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9jbWRfc2NhbiB7CisJLy8gICAgICAgIHU4ICBzc2lk WzMyXTsKKwl1OCBzc2lkX2xlbjsKKwkvLyAgICAgICAgdTggaHdfY2hhbm5lbFsxNF07CisJdTgg bl9jaGFubmVsczsKKwl1OCBpZV9sZW47CisJdTggYWJvcnRlZDsKK30gX19wYWNrZWQ7CQkJLy8g aWVbXSBhcHBlbmQgYXQgdGhlIGVuZAorCitzdHJ1Y3Qgc2lwX2NtZF9zZXRrZXkgeworCXU4IGJz c2lkX25vOworCXU4IGFkZHJbRVRIX0FMRU5dOworCXU4IGFsZzsKKwl1OCBrZXlpZHg7CisJdTgg aHdfa2V5X2lkeDsKKwl1OCBmbGFnczsKKwl1OCBrZXlsZW47CisJdTgga2V5WzMyXTsKK30gX19w YWNrZWQ7CisKK3N0cnVjdCBzaXBfY21kX2NvbmZpZyB7CisJdTE2IGNlbnRlcl9mcmVxOworCXUx NiBkdXJhdGlvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzaXBfY21kX2Jzc19pbmZvX3VwZGF0 ZSB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXUxNiBpc2Fzc29jOworCXUzMiBiZWFjb25faW50 OworCXU4IGJzc2lkX25vOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9ldnRfYm9vdHVwIHsK Kwl1MTYgdHhfYmxrc3o7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCS8qIGFueXRoaW5nIGVs c2UgPyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9jbWRfc2V0dmlmIHsKKwl1OCBpbmRl eDsKKwl1OCBtYWNbRVRIX0FMRU5dOworCXU4IHNldDsKKwl1OCBvcF9tb2RlOworCXU4IGlzX3Ay cDsKK30gX19wYWNrZWQ7CisKK2VudW0gZXNwX2llZWU4MDIxMV9waHl0eXBlIHsKKwlFU1BfSUVF RTgwMjExX1RfQ0NLID0gMCwKKwlFU1BfSUVFRTgwMjExX1RfT0ZETSA9IDEsCisJRVNQX0lFRUU4 MDIxMV9UX0hUMjBfTCA9IDIsCisJRVNQX0lFRUU4MDIxMV9UX0hUMjBfUyA9IDMsCit9OworCitz dHJ1Y3Qgc2lwX2NtZF9zZXRzdGEgeworCXU4IGlmaWR4OworCXU4IGluZGV4OworCXU4IHNldDsK Kwl1OCBwaHltb2RlOworCXU4IG1hY1tFVEhfQUxFTl07CisJdTE2IGFpZDsKKwl1OCBhbXBkdV9m YWN0b3I7CisJdTggYW1wZHVfZGVuc2l0eTsKKwl1MTYgcmVzdjsKK30gX19wYWNrZWQ7CisKK3N0 cnVjdCBzaXBfY21kX3BzIHsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCBtYXhfc2xlZXBfcGVyaW9k OworCXU4IG9uOworCXU4IHJlc3Y7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2lwX2NtZF9zdXNw ZW5kIHsKKwl1OCBzdXNwZW5kOworCXU4IHJlc3ZbM107Cit9IF9fcGFja2VkOworCisjZGVmaW5l IFNJUF9EVU1QX1JQQk1fRVJSCUJJVCgwKQorI2RlZmluZSBTSVBfUlhBQk9SVF9GSVhFRAlCSVQo MSkKKyNkZWZpbmUgU0lQX1NVUFBPUlRfQkdTQ0FOCUJJVCgyKQorc3RydWN0IHNpcF9ldnRfYm9v dHVwMiB7CisJdTE2IHR4X2Jsa3N6OworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1MTYgcnhf Ymxrc3o7CisJdTggY3JlZGl0X3RvX3Jlc2VydmU7CisJdTggb3B0aW9uczsKKwlzMTYgbm9pc2Vf Zmxvb3I7CisJdTggcmVzdlsyXTsKKwkvKiBhbnl0aGluZyBlbHNlID8gKi8KK30gX19wYWNrZWQ7 CisKK2VudW0gdHJjX2FtcGR1X3N0YXRlIHsKKwlUUkNfVFhfQU1QRFVfU1RPUFBFRCA9IDEsCisJ VFJDX1RYX0FNUERVX09QRVJBVElPTkFMLAorCVRSQ19UWF9BTVBEVV9XQUlUX1NUT1AsCisJVFJD X1RYX0FNUERVX1dBSVRfT1BFUkFUSU9OQUwsCisJVFJDX1RYX0FNUERVX1NUQVJULAorfTsKKwor c3RydWN0IHNpcF9ldnRfdHJjX2FtcGR1IHsKKwl1OCBzdGF0ZTsKKwl1OCB0aWQ7CisJdTggYWRk cltFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2lwX2NtZF9zZXRfd21tX3BhcmFt cyB7CisJdTggYWNpOworCXU4IGFpZnM7CisJdTggZWN3X21pbjsKKwl1OCBlY3dfbWF4OworCXUx NiB0eG9wX3VzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBTSVBfQU1QRFVfUlhfU1RBUlQJCTAK KyNkZWZpbmUgU0lQX0FNUERVX1JYX1NUT1AJCTEKKyNkZWZpbmUgU0lQX0FNUERVX1RYX09QRVJB VElPTkFMCTIKKyNkZWZpbmUgU0lQX0FNUERVX1RYX1NUT1AJCTMKKworc3RydWN0IHNpcF9jbWRf YW1wZHVfYWN0aW9uIHsKKwl1OCBhY3Rpb247CisJdTggaW5kZXg7CisJdTggdGlkOworCXU4IHdp bl9zaXplOworCXUxNiBzc247CisJdTggYWRkcltFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCisj ZGVmaW5lIFNJUF9UWF9TVF9PSwkJMAorI2RlZmluZSBTSVBfVFhfU1RfTk9FQgkJMQorI2RlZmlu ZSBTSVBfVFhfU1RfQUNLVE8JCTIKKyNkZWZpbmUgU0lQX1RYX1NUX0VOQ0VSUgkzCisKKy8vTkI6 IHNpcF90eF9zdGF0dXMgbXVzdCBiZSA0IGJ5dGVzIGFsaWduZWQKK3N0cnVjdCBzaXBfdHhfc3Rh dHVzIHsKKwl1MzIgc2lwX3NlcTsKKwl1OCBlcnJubzsJCS8qIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBj b2RlICovCisJdTggcmF0ZV9pbmRleDsKKwljaGFyIGFja19zaWduYWw7CisJdTggcGFkOworfSBf X3BhY2tlZDsKKworc3RydWN0IHNpcF9ldnRfc2Nhbl9yZXBvcnQgeworCXUxNiBzY2FuX2lkOwor CXUxNiBhYm9ydGVkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNpcF9ldnRfcm9jIHsKKwl1MTYg c3RhdGU7CQkvL3N0YXJ0OjEsIGVuZCA6MAorCXUxNiBpc19vazsKK30gX19wYWNrZWQ7CisKK3N0 cnVjdCBzaXBfZXZ0X3R4aWRsZSB7CisJdTMyIGxhc3Rfc2VxOworfSBfX3BhY2tlZDsKKworc3Ry dWN0IHNpcF9ldnRfbm9pc2VmbG9vciB7CisJczE2IG5vaXNlX2Zsb29yOworCXUxNiBwYWQ7Cit9 IF9fcGFja2VkOworLyogIGZvciBtYmxrIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBubyBuZWVkIGZv ciBzaXBfaGRyLiB0eDogZmlyc3QgMmsgZm9yIGNvbnRybCBtc2csCisgKiAgcmVzdCBvZiAxNGsg Zm9yIGRhdGEuICByeCwgc2FtZS4KKyAqLworCisjZW5kaWYJCQkJLyogX1NJUF9DT01NT05fSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L3NsY19ob3N0X3JlZ2lzdGVy LmggYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9zbGNfaG9zdF9yZWdpc3Rlci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGNmMTM5YzBkN2JjCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2xjX2hvc3RfcmVnaXN0ZXIuaApAQCAt MCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBFc3ByZXNzaWYgU3lzdGVt LgorICogQ29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCisgKiAgICAgIFF1ZW50aW4g U2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBTTENfSE9TVF9SRUdJU1RFUl9IX0lOQ0xVREVE CisjZGVmaW5lIFNMQ19IT1NUX1JFR0lTVEVSX0hfSU5DTFVERUQKKworLyogI2RlZmluZSBSRUdf U0xDX0hPU1RfQkFTRSAgMHgwMDAwMDAwMCAqLworLyogc2tpcCB0aGUgdG9rZW4xLCBzaW5jZSBy ZWFkaW5nIGl0IHdpbGwgY2xlYW4gdGhlIGNyZWRpdCAqLworI2RlZmluZSBSRUdfU0xDX0hPU1Rf QkFTRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUkVHX1NMQ19CQVNFCQkJCTB4MDAwMDAwMDAKKwor I2RlZmluZSBTTENfSE9TVF9QRgkJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDApCisjZGVmaW5l IFNMQ19IT1NUX1RPS0VOX1JEQVRBCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHg0KQorI2RlZmlu ZSBTTENfSE9TVF9SWF9QRl9FT0YJCQkweDAwMDAwMDBGCisjZGVmaW5lIFNMQ19IT1NUX1JYX1BG X0VPRl9TCQkJMjgKKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4xCQkJCTB4MDAwMDBGRkYKKyNkZWZp bmUgU0xDX0hPU1RfVE9LRU4xX1MJCQkxNgorI2RlZmluZSBTTENfSE9TVF9SWF9QRl9WQUxJRAkJ CUJJVCgxNSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wCQkJCTB4MDAwMDBGRkYKKyNkZWZpbmUg U0xDX0hPU1RfVE9LRU4wX1MJCQkwCisKKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wX01BU0sJCQlT TENfSE9TVF9UT0tFTjAKKyNkZWZpbmUgU0xDX0hPU1RfSU5UX1JBVwkJCShSRUdfU0xDX0hPU1Rf QkFTRSArIDB4OCkKKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDNfSU5UX1JBVwkJQklUKDIyKQor I2RlZmluZSBTTENfSE9TVF9FWFRfQklUMl9JTlRfUkFXCQlCSVQoMjEpCisjZGVmaW5lIFNMQ19I T1NUX0VYVF9CSVQxX0lOVF9SQVcJCUJJVCgyMCkKKyNkZWZpbmUgU0xDX0hPU1RfUlhGSUZPX05P VF9FTVBUWV9JTlRfUkFXCUJJVCgxOSkKKyNkZWZpbmUgU0xDX0hPU1RfUlhfUEZfVkFMSURfSU5U X1JBVwkJQklUKDE4KQorI2RlZmluZSBTTENfSE9TVF9UWF9PVkZfSU5UX1JBVwkJCUJJVCgxNykK KyNkZWZpbmUgU0xDX0hPU1RfUlhfVURGX0lOVF9SQVcJCQlCSVQoMTYpCisjZGVmaW5lIFNMQ19I T1NUX1RYX1NUQVJUX0lOVF9SQVcJCUJJVCgxNSkKKyNkZWZpbmUgU0xDX0hPU1RfUlhfU1RBUlRf SU5UX1JBVwkJQklUKDE0KQorI2RlZmluZSBTTENfSE9TVF9SWF9FT0ZfSU5UX1JBVwkJCUJJVCgx MykKKyNkZWZpbmUgU0xDX0hPU1RfUlhfU09GX0lOVF9SQVcJCQlCSVQoMTIpCisjZGVmaW5lIFNM Q19IT1NUX1RPS0VOMV8wVE8xX0lOVF9SQVcJCUJJVCgxMSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9L RU4wXzBUTzFfSU5UX1JBVwkJQklUKDEwKQorI2RlZmluZSBTTENfSE9TVF9UT0tFTjFfMVRPMF9J TlRfUkFXCQlCSVQoOSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wXzFUTzBfSU5UX1JBVwkJQklU KDgpCisjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQ3X0lOVF9SQVcJCUJJVCg3KQorI2RlZmlu ZSBTTENfSE9TVF9UT0hPU1RfQklUNl9JTlRfUkFXCQlCSVQoNikKKyNkZWZpbmUgU0xDX0hPU1Rf VE9IT1NUX0JJVDVfSU5UX1JBVwkJQklUKDUpCisjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQ0 X0lOVF9SQVcJCUJJVCg0KQorI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUM19JTlRfUkFXCQlC SVQoMykKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDJfSU5UX1JBVwkJQklUKDIpCisjZGVm aW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQxX0lOVF9SQVcJCUJJVCgxKQorI2RlZmluZSBTTENfSE9T VF9UT0hPU1RfQklUMF9JTlRfUkFXCQlCSVQoMCkKKworI2RlZmluZSBTTENfSE9TVF9TVEFURV9X MAkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4QykKKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEUzCQkJ CTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEUzX1MJCQkyNAorI2RlZmluZSBTTENf SE9TVF9TVEFURTIJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBTTENfSE9TVF9TVEFURTJfUwkJCTE2 CisjZGVmaW5lIFNMQ19IT1NUX1NUQVRFMQkJCQkweDAwMDAwMEZGCisjZGVmaW5lIFNMQ19IT1NU X1NUQVRFMV9TCQkJOAorI2RlZmluZSBTTENfSE9TVF9TVEFURTAJCQkJMHgwMDAwMDBGRgorI2Rl ZmluZSBTTENfSE9TVF9TVEFURTBfUwkJCTAKKworI2RlZmluZSBTTENfSE9TVF9TVEFURV9XMQkJ CShSRUdfU0xDX0hPU1RfQkFTRSArIDB4MTApCisjZGVmaW5lIFNMQ19IT1NUX1NUQVRFNwkJCQkw eDAwMDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX1NUQVRFN19TCQkJMjQKKyNkZWZpbmUgU0xDX0hP U1RfU1RBVEU2CQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEU2X1MJCQkxNgor I2RlZmluZSBTTENfSE9TVF9TVEFURTUJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBTTENfSE9TVF9T VEFURTVfUwkJCTgKKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEU0CQkJCTB4MDAwMDAwRkYKKyNkZWZp bmUgU0xDX0hPU1RfU1RBVEU0X1MJCQkwCisKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORl9XMAkJCShS RUdfU0xDX0hPU1RfQkFTRSArIDB4MTQpCisjZGVmaW5lIFNMQ19IT1NUX0NPTkYzCQkJCTB4MDAw MDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjNfUwkJCTI0CisjZGVmaW5lIFNMQ19IT1NUX0NP TkYyCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjJfUwkJCTE2CisjZGVmaW5l IFNMQ19IT1NUX0NPTkYxCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjFfUwkJ CTgKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjAJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBTTENfSE9T VF9DT05GMF9TCQkJMAorCisjZGVmaW5lIFNMQ19IT1NUX0NPTkZfVzEJCQkoUkVHX1NMQ19IT1NU X0JBU0UgKyAweDE4KQorI2RlZmluZSBTTENfSE9TVF9DT05GNwkJCQkweDAwMDAwMEZGCisjZGVm aW5lIFNMQ19IT1NUX0NPTkY3X1MJCQkyNAorI2RlZmluZSBTTENfSE9TVF9DT05GNgkJCQkweDAw MDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX0NPTkY2X1MJCQkxNgorI2RlZmluZSBTTENfSE9TVF9D T05GNQkJCQkweDAwMDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX0NPTkY1X1MJCQk4CisjZGVmaW5l IFNMQ19IT1NUX0NPTkY0CQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjRfUwkJ CTAKKworI2RlZmluZSBTTENfSE9TVF9JTlRfU1QJCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgx QykKKyNkZWZpbmUgU0xDX0hPU1RfUlhfU1QJCQkJQklUKDIzKQorI2RlZmluZSBTTENfSE9TVF9F WFRfQklUM19JTlRfU1QJCUJJVCgyMikKKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDJfSU5UX1NU CQlCSVQoMjEpCisjZGVmaW5lIFNMQ19IT1NUX0VYVF9CSVQxX0lOVF9TVAkJQklUKDIwKQorI2Rl ZmluZSBTTENfSE9TVF9SWEZJRk9fTk9UX0VNUFRZX0lOVF9TVAlCSVQoMTkpCisjZGVmaW5lIFNM Q19IT1NUX1JYX1BGX1ZBTElEX0lOVF9TVAkJQklUKDE4KQorI2RlZmluZSBTTENfSE9TVF9UWF9P VkZfSU5UX1NUCQkJQklUKDE3KQorI2RlZmluZSBTTENfSE9TVF9SWF9VREZfSU5UX1NUCQkJQklU KDE2KQorI2RlZmluZSBTTENfSE9TVF9UWF9TVEFSVF9JTlRfU1QJCUJJVCgxNSkKKyNkZWZpbmUg U0xDX0hPU1RfUlhfU1RBUlRfSU5UX1NUCQlCSVQoMTQpCisjZGVmaW5lIFNMQ19IT1NUX1JYX0VP Rl9JTlRfU1QJCQlCSVQoMTMpCisjZGVmaW5lIFNMQ19IT1NUX1JYX1NPRl9JTlRfU1QJCQlCSVQo MTIpCisjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMV8wVE8xX0lOVF9TVAkJQklUKDExKQorI2RlZmlu ZSBTTENfSE9TVF9UT0tFTjBfMFRPMV9JTlRfU1QJCUJJVCgxMCkKKyNkZWZpbmUgU0xDX0hPU1Rf VE9LRU4xXzFUTzBfSU5UX1NUCQlCSVQoOSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wXzFUTzBf SU5UX1NUCQlCSVQoOCkKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDdfSU5UX1NUCQlCSVQo NykKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDZfSU5UX1NUCQlCSVQoNikKKyNkZWZpbmUg U0xDX0hPU1RfVE9IT1NUX0JJVDVfSU5UX1NUCQlCSVQoNSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9I T1NUX0JJVDRfSU5UX1NUCQlCSVQoNCkKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDNfSU5U X1NUCQlCSVQoMykKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDJfSU5UX1NUCQlCSVQoMikK KyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDFfSU5UX1NUCQlCSVQoMSkKKyNkZWZpbmUgU0xD X0hPU1RfVE9IT1NUX0JJVDBfSU5UX1NUCQlCSVQoMCkKKworI2RlZmluZSBTTENfSE9TVF9DT05G X1cyCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgyMCkKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjEx CQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjExX1MJCQkyNAorI2RlZmluZSBT TENfSE9TVF9DT05GMTAJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBTTENfSE9TVF9DT05GMTBfUwkJ CTE2CisjZGVmaW5lIFNMQ19IT1NUX0NPTkY5CQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hP U1RfQ09ORjlfUwkJCTgKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjgJCQkJMHgwMDAwMDBGRgorI2Rl ZmluZSBTTENfSE9TVF9DT05GOF9TCQkJMAorCisjZGVmaW5lIFNMQ19IT1NUX0NPTkZfVzMJCQko UkVHX1NMQ19IT1NUX0JBU0UgKyAweDI0KQorI2RlZmluZSBTTENfSE9TVF9DT05GMTUJCQkJMHgw MDAwMDBGRgorI2RlZmluZSBTTENfSE9TVF9DT05GMTVfUwkJCTI0CisjZGVmaW5lIFNMQ19IT1NU X0NPTkYxNAkJCQkweDAwMDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX0NPTkYxNF9TCQkJMTYKKyNk ZWZpbmUgU0xDX0hPU1RfQ09ORjEzCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09O RjEzX1MJCQk4CisjZGVmaW5lIFNMQ19IT1NUX0NPTkYxMgkJCQkweDAwMDAwMEZGCisjZGVmaW5l IFNMQ19IT1NUX0NPTkYxMl9TCQkJMAorCisjZGVmaW5lIFNMQ19IT1NUX0dFTl9UWERPTkVfSU5U CQkJQklUKDE2KQorI2RlZmluZSBTTENfSE9TVF9HRU5fUlhET05FX0lOVAkJCUJJVCgxNykKKwor I2RlZmluZSBTTENfSE9TVF9DT05GX1c0CQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgyOCkKKyNk ZWZpbmUgU0xDX0hPU1RfQ09ORjE5CQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09O RjE5X1MJCQkyNAorI2RlZmluZSBTTENfSE9TVF9DT05GMTgJCQkJMHgwMDAwMDBGRgorI2RlZmlu ZSBTTENfSE9TVF9DT05GMThfUwkJCTE2CisjZGVmaW5lIFNMQ19IT1NUX0NPTkYxNwkJCQkweDAw MDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX0NPTkYxN19TCQkJOAorI2RlZmluZSBTTENfSE9TVF9D T05GMTYJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBTTENfSE9TVF9DT05GMTZfUwkJCTAKKworI2Rl ZmluZSBTTENfSE9TVF9UT0tFTl9XREFUQQkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4MkMpCisj ZGVmaW5lIFNMQ19IT1NUX1RPS0VOMV9XRAkJCTB4MDAwMDBGRkYKKyNkZWZpbmUgU0xDX0hPU1Rf VE9LRU4xX1dEX1MJCQkxNgorI2RlZmluZSBTTENfSE9TVF9UT0tFTjBfV0QJCQkweDAwMDAwRkZG CisjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMF9XRF9TCQkJMAorCisjZGVmaW5lIFNMQ19IT1NUX0lO VF9DTFIJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDMwKQorI2RlZmluZSBTTENfSE9TVF9UT0tF TjFfV1IJCQlCSVQoMzEpCisjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMF9XUgkJCUJJVCgzMCkKKyNk ZWZpbmUgU0xDX0hPU1RfVE9LRU4xX0RFQwkJCUJJVCgyOSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9L RU4wX0RFQwkJCUJJVCgyOCkKKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDNfSU5UX0NMUgkJQklU KDIyKQorI2RlZmluZSBTTENfSE9TVF9FWFRfQklUMl9JTlRfQ0xSCQlCSVQoMjEpCisjZGVmaW5l IFNMQ19IT1NUX0VYVF9CSVQxX0lOVF9DTFIJCUJJVCgyMCkKKyNkZWZpbmUgU0xDX0hPU1RfRVhU X0JJVDBfSU5UX0NMUgkJQklUKDE5KQorI2RlZmluZSBTTENfSE9TVF9SWF9QRl9WQUxJRF9JTlRf Q0xSCQlCSVQoMTgpCisjZGVmaW5lIFNMQ19IT1NUX1RYX09WRl9JTlRfQ0xSCQkJQklUKDE3KQor I2RlZmluZSBTTENfSE9TVF9SWF9VREZfSU5UX0NMUgkJCUJJVCgxNikKKyNkZWZpbmUgU0xDX0hP U1RfVFhfU1RBUlRfSU5UX0NMUgkJQklUKDE1KQorI2RlZmluZSBTTENfSE9TVF9SWF9TVEFSVF9J TlRfQ0xSCQlCSVQoMTQpCisjZGVmaW5lIFNMQ19IT1NUX1JYX0VPRl9JTlRfQ0xSCQkJQklUKDEz KQorI2RlZmluZSBTTENfSE9TVF9SWF9TT0ZfSU5UX0NMUgkJCUJJVCgxMikKKyNkZWZpbmUgU0xD X0hPU1RfVE9LRU4xXzBUTzFfSU5UX0NMUgkJQklUKDExKQorI2RlZmluZSBTTENfSE9TVF9UT0tF TjBfMFRPMV9JTlRfQ0xSCQlCSVQoMTApCisjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMV8xVE8wX0lO VF9DTFIJCUJJVCg5KQorI2RlZmluZSBTTENfSE9TVF9UT0tFTjBfMVRPMF9JTlRfQ0xSCQlCSVQo OCkKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDdfSU5UX0NMUgkJQklUKDcpCisjZGVmaW5l IFNMQ19IT1NUX1RPSE9TVF9CSVQ2X0lOVF9DTFIJCUJJVCg2KQorI2RlZmluZSBTTENfSE9TVF9U T0hPU1RfQklUNV9JTlRfQ0xSCQlCSVQoNSkKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDRf SU5UX0NMUgkJQklUKDQpCisjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQzX0lOVF9DTFIJCUJJ VCgzKQorI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMl9JTlRfQ0xSCQlCSVQoMikKKyNkZWZp bmUgU0xDX0hPU1RfVE9IT1NUX0JJVDFfSU5UX0NMUgkJQklUKDEpCisjZGVmaW5lIFNMQ19IT1NU X1RPSE9TVF9CSVQwX0lOVF9DTFIJCUJJVCgwKQorCisjZGVmaW5lIFNMQ19IT1NUX0lOVF9FTkEJ CQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDM0KQorI2RlZmluZSBTTENfSE9TVF9FWFRfQklUM19J TlRfRU5BCQlCSVQoMjIpCisjZGVmaW5lIFNMQ19IT1NUX0VYVF9CSVQyX0lOVF9FTkEJCUJJVCgy MSkKKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDFfSU5UX0VOQQkJQklUKDIwKQorI2RlZmluZSBT TENfSE9TVF9FWFRfQklUMF9JTlRfRU5BCQlCSVQoMTkpCisjZGVmaW5lIFNMQ19IT1NUX1JYX1BG X1ZBTElEX0lOVF9FTkEJCUJJVCgxOCkKKyNkZWZpbmUgU0xDX0hPU1RfVFhfT1ZGX0lOVF9FTkEJ CQlCSVQoMTcpCisjZGVmaW5lIFNMQ19IT1NUX1JYX1VERl9JTlRfRU5BCQkJQklUKDE2KQorI2Rl ZmluZSBTTENfSE9TVF9UWF9TVEFSVF9JTlRfRU5BCQlCSVQoMTUpCisjZGVmaW5lIFNMQ19IT1NU X1JYX1NUQVJUX0lOVF9FTkEJCUJJVCgxNCkKKyNkZWZpbmUgU0xDX0hPU1RfUlhfRU9GX0lOVF9F TkEJCQlCSVQoMTMpCisjZGVmaW5lIFNMQ19IT1NUX1JYX1NPRl9JTlRfRU5BCQkJQklUKDEyKQor I2RlZmluZSBTTENfSE9TVF9UT0tFTjFfMFRPMV9JTlRfRU5BCQlCSVQoMTEpCisjZGVmaW5lIFNM Q19IT1NUX1RPS0VOMF8wVE8xX0lOVF9FTkEJCUJJVCgxMCkKKyNkZWZpbmUgU0xDX0hPU1RfVE9L RU4xXzFUTzBfSU5UX0VOQQkJQklUKDkpCisjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMF8xVE8wX0lO VF9FTkEJCUJJVCg4KQorI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUN19JTlRfRU5BCQlCSVQo NykKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDZfSU5UX0VOQQkJQklUKDYpCisjZGVmaW5l IFNMQ19IT1NUX1RPSE9TVF9CSVQ1X0lOVF9FTkEJCUJJVCg1KQorI2RlZmluZSBTTENfSE9TVF9U T0hPU1RfQklUNF9JTlRfRU5BCQlCSVQoNCkKKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDNf SU5UX0VOQQkJQklUKDMpCisjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQyX0lOVF9FTkEJCUJJ VCgyKQorI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMV9JTlRfRU5BCQlCSVQoMSkKKyNkZWZp bmUgU0xDX0hPU1RfVE9IT1NUX0JJVDBfSU5UX0VOQQkJQklUKDApCisKKyNkZWZpbmUgU0xDX0hP U1RfQ09ORl9XNQkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4M0MpCisjZGVmaW5lIFNMQ19IT1NU X0NPTkYyMwkJCQkweDAwMDAwMEZGCisjZGVmaW5lIFNMQ19IT1NUX0NPTkYyM19TCQkJMjQKKyNk ZWZpbmUgU0xDX0hPU1RfQ09ORjIyCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09O RjIyX1MJCQkxNgorI2RlZmluZSBTTENfSE9TVF9DT05GMjEJCQkJMHgwMDAwMDBGRgorI2RlZmlu ZSBTTENfSE9TVF9DT05GMjFfUwkJCTgKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIwCQkJCTB4MDAw MDAwRkYKKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIwX1MJCQkwCisKKyNkZWZpbmUgU0xDX0hPU1Rf V0lOX0NNRAkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4NDApCisKKyNkZWZpbmUgU0xDX0hPU1Rf REFURQkJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDc4KQorI2RlZmluZSBTTENfSE9TVF9JRAkJ CQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDdDKQorCisjZGVmaW5lIFNMQ19BRERSX1dJTkRPV19D TEVBUl9NQVNLCQkofigweGYgPDwgMTIpKQorI2RlZmluZSBTTENfRlJPTV9IT1NUX0FERFJfV0lO RE9XCQlCSVQoMTIpCisjZGVmaW5lIFNMQ19UT19IT1NUX0FERFJfV0lORE9XCQkJKDB4MyA8PCAx MikKKworI2RlZmluZSBTTENfU0VUX0ZST01fSE9TVF9BRERSX1dJTkRPVyh2KSAgIGRvIHsgXAor CSh2KSAmPSAweGZmZmY7ICAgIFwKKwkodikgJj0gU0xDX0FERFJfV0lORE9XX0NMRUFSX01BU0s7 IFwKKwkodikgfD0gU0xDX0ZST01fSE9TVF9BRERSX1dJTkRPVzsgXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBTTENfU0VUX1RPX0hPU1RfQUREUl9XSU5ET1codikgICBkbyB7IFwKKwkodikgJj0g MHhmZmZmOyAgICBcCisJKHYpICY9IFNMQ19BRERSX1dJTkRPV19DTEVBUl9NQVNLOyBcCisJKHYp IHw9IFNMQ19UT19IT1NUX0FERFJfV0lORE9XOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNM Q19JTlRfRU5BCQkJCShSRUdfU0xDX0JBU0UgKyAweEMpCisjZGVmaW5lIFNMQ19SWF9FT0ZfSU5U X0VOQQkJCUJJVCgxNykKKyNkZWZpbmUgU0xDX0ZSSE9TVF9CSVQyX0lOVF9FTkEJCQlCSVQoMikK KworI2RlZmluZSBTTENfUlhfTElOSwkJCQkoUkVHX1NMQ19CQVNFICsgMHgyNCkKKyNkZWZpbmUg U0xDX1JYTElOS19TVEFSVAkJCUJJVCgyOSkKKworI2RlZmluZSBTTENfQlJJREdFX0NPTkYJCQkJ KFJFR19TTENfQkFTRSArIDB4NDQpCisjZGVmaW5lIFNMQ19UWF9QVVNIX0lETEVfTlVNCQkJMHhG RkZGCisjZGVmaW5lIFNMQ19UWF9QVVNIX0lETEVfTlVNX1MJCQkxNgorI2RlZmluZSBTTENfSERB X01BUF8xMjhLCQkJQklUKDEzKQorI2RlZmluZSBTTENfVFhfRFVNTVlfTU9ERQkJCUJJVCgxMikK KyNkZWZpbmUgU0xDX0ZJRk9fTUFQX0VOQQkJCTB4MDAwMDAwMEYKKyNkZWZpbmUgU0xDX0ZJRk9f TUFQX0VOQV9TCQkJOAorI2RlZmluZSBTTENfVFhFT0ZfRU5BCQkJCTB4MDAwMDAwM0YKKyNkZWZp bmUgU0xDX1RYRU9GX0VOQV9TCisKKyNlbmRpZgkJCQkvLyBTTENfSE9TVF9SRUdJU1RFUl9IX0lO Q0xVREVECi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkZXZlbCBtYWlsaW5nIGxpc3QKZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9y ZwpodHRwOi8vZHJpdmVyZGV2LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcml2ZXJkZXYtZGV2ZWwK