From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF6DB6F87D for ; Fri, 23 Oct 2020 12:42:33 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 23 Oct 2020 14:41:55 +0200 Message-Id: <20201023124212.26428-7-zbigniew.kempczynski@intel.com> In-Reply-To: <20201023124212.26428-1-zbigniew.kempczynski@intel.com> References: <20201023124212.26428-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v3 06/23] lib/intel_allocator: Add intel_allocator core List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Petri Latvala , Chris Wilson List-ID: Rm9yIGRpc2NyZXRlIGdlbnMgd2UgaGF2ZSB0byBjZWFzZSBvZiB1c2luZyByZWxvY2F0aW9ucyB3 aGVuIGJhdGNoCmJ1ZmZlcnMgYXJlIHN1Ym1pdHRlZCB0byBHUFUuIENhcmRzIHdoaWNoIGhhdmUg cHBndHQgY2FuIHVzZSBzb2Z0cGluCmFuZCBlc3RhYmxpc2ggYWRkcmVzc2VzIG9uIG91ciBvd24u CgpXZSBhZGRlZCBzaW1wbGUgYWxsb2NhdG9yICh0YWtlbiBmcm9tIE1lc2E7IHdvcmtzIG9uIGxp c3RzKSBhbmQgYWRkZWQKcmFuZG9tIGFsbG9jYXRvciB0byBleGVyY2lzZSBiYXRjaGVzIHdpdGgg ZGlmZmVyZW50IGFkZHJlc3Nlcy4gQWxsCm9mIHRoYXQgd29ya3MgZm9yIHNpbmdsZSBWTSAoY29u dGV4dCkgc28gd2UgaGF2ZSB0byBhZGQgYWRkaXRpb25hbApsYXllciAoaW50ZWxfYWxsb2NhdG9y KSB0byBzdXBwb3J0IG11bHRpcHJvY2Vzc2luZyAvIG11bHRpdGhyZWFkaW5nLgoKRm9yIG1haW4g SUdUIHByb2Nlc3MgKGFsc28gZm9yIHRocmVhZHMgY3JlYXRlZCBpbiBpdCkgaW50ZWxfYWxsb2Nh dG9yCnJlc29sdmVzIGFkZHJlc3NlcyAibG9jYWxseSIsIGp1c3QgYnkgbXV0ZXhpbmcgYWNjZXNz IHRvIGdsb2JhbAphbGxvY2F0b3IgZGF0YSAoYWxsb2NhdG9ycyBtYXApLiBXaGVuIGZvcmsoKSBp cyBpbiB1c2UgY2hpbGRyZW4gY2Fubm90CmVzdGFibGlzaCBhZGRyZXNzZXMgb24gdGhleSBvd24g YW5kIGhhdmUgdG8gY29udGFjdCB0byB0aGUgdGhyZWFkCnNwYXduZWQgd2l0aGluIG1haW4gSUdU IHByb2Nlc3MuIEN1cnJlbnRseSBTeXNWIElQQyBtZXNzYWdlIHF1ZXVlIHdhcwpjaG9zZW4gYXMg YSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWxsb2NhdG9yIHRo cmVhZC4KQ2hpbGQgY2FsbHMgc2FtZSBmdW5jdGlvbnMgYXMgbWFpbiBJR1QgcHJvY2Vzcywgb25s eSBjb21tdW5pY2F0aW9uIHBhdGgKd2lsbCBiZSBjaG9zZW4gaW5zdGVhZCBvZiBhY3F1aXJpbmcg YWRkcmVzc2VzIGxvY2FsbHkuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5xYRza2kg PHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRG9taW5payBH cnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2 YWxhQGludGVsLmNvbT4KLS0tCiAuLi4vaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3Mu eG1sICAgICAgfCAgIDEgKwogbGliL2lndF9jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEzICsKIGxpYi9pbnRlbF9hbGxvY2F0b3IuYyAgICAgICAgICAgICAgICAgICAg ICAgICB8IDkzOSArKysrKysrKysrKysrKysrKysKIGxpYi9pbnRlbF9hbGxvY2F0b3IuaCAgICAg ICAgICAgICAgICAgICAgICAgICB8IDEzNiArKysKIGxpYi9pbnRlbF9hbGxvY2F0b3JfbXNnY2hh bm5lbC5jICAgICAgICAgICAgICB8IDE4MiArKysrCiBsaWIvaW50ZWxfYWxsb2NhdG9yX21zZ2No YW5uZWwuaCAgICAgICAgICAgICAgfCAxNDAgKysrCiBsaWIvaW50ZWxfYWxsb2NhdG9yX3NpbXBs ZS5jICAgICAgICAgICAgICAgICAgfCAgIDIgLQogbGliL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIDggZmlsZXMgY2hhbmdlZCwgMTQxNSBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hbGxv Y2F0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hbGxvY2F0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hbGxvY2F0b3JfbXNnY2hhbm5lbC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2ludGVsX2FsbG9jYXRvcl9tc2djaGFubmVsLmgKCmRpZmYgLS1naXQgYS9k b2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2Nz L3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggYmY1 YWM1NDIuLjE5MmQxZGY3IDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xz L2lndC1ncHUtdG9vbHMtZG9jcy54bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29s cy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1sCkBAIC00Myw2ICs0Myw3IEBACiAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF92YzQueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2ln dF92Z2VtLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfeDg2LnhtbCIvPgor ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9hbGxvY2F0b3IueG1sIi8+CiAgICAgPHhp OmluY2x1ZGUgaHJlZj0ieG1sL2ludGVsX2JhdGNoYnVmZmVyLnhtbCIvPgogICAgIDx4aTppbmNs dWRlIGhyZWY9InhtbC9pbnRlbF9idWZvcHMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i eG1sL2ludGVsX2NoaXBzZXQueG1sIi8+CmRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUuYyBiL2xp Yi9pZ3RfY29yZS5jCmluZGV4IDFmNzI1ZDAwLi45ZjgwZDFkNiAxMDA2NDQKLS0tIGEvbGliL2ln dF9jb3JlLmMKKysrIGIvbGliL2lndF9jb3JlLmMKQEAgLTE0MTQsNiArMTQxNCwxOSBAQCBzdGF0 aWMgdm9pZCBleGl0X3N1YnRlc3QoY29uc3QgY2hhciAqcmVzdWx0KQogCX0KIAludW1fdGVzdF9j aGlsZHJlbiA9IDA7CiAKKwkvKgorCSAqIFdoZW4gdGVzdCBjb21wbGV0ZXMgLSBtb3N0bHkgaW4g ZmFpbCBzdGF0ZSBpdCBjYW4gbGVhdmUgYWxsb2NhdGVkCisJICogb2JqZWN0cy4gQW4gYWxsb2Nh dG9yIGlzIG5vdCBhbiBleGNlcHRpb24gYXMgaXQgaXMgZ2xvYmFsIElHVAorCSAqIGVudGl0eSBh bmQgd2hlbiB0ZXN0IHdpbGwgYWxsb2NhdGUgc29tZSByYW5nZXMgYW5kIHRoZW4gaXQgd2lsbAor CSAqIGZhaWwgbm8gZnJlZS9jbG9zZSBsaWtlbHkgd2lsbCBiZSBjYWxsZWQgKGNvbnRyb2xpbmcg cG90ZW50aWFsCisJICogZmFpbHMgYW5kIGNsZWFyaW5nIGJlZm9yZSBhc3NlcnRpb25zIGluIElH VCBpcyBub3QgY29tbW9uKS4KKwkgKgorCSAqIFdlIGNhbGwgaW50ZWxfYWxsb2NhdG9yX2luaXQo KSB0aGVuIHRvIHByZXBhcmUgdGhlIGFsbG9jYXRvcgorCSAqIGluZnJhc3RydWN0dXJlIGZyb20g c2NyYXRjaCBmb3IgZWFjaCB0ZXN0LiBJbml0IGFsc28gcmVtb3ZlcworCSAqIHJlbW5hbnRzIGZy b20gcHJldmlvdXMgYWxsb2NhdG9yIHJ1biAoaWYgYW55KS4KKwkgKi8KKwlpbnRlbF9hbGxvY2F0 b3JfaW5pdCgpOworCiAJaWYgKCFpbl9keW5hbWljX3N1YnRlc3QpCiAJCV9pZ3RfZHluYW1pY190 ZXN0c19leGVjdXRlZCA9IC0xOwogCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYWxsb2NhdG9yLmMg Yi9saWIvaW50ZWxfYWxsb2NhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAuLmIwYWUxZDhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVsX2FsbG9jYXRvci5jCkBA IC0wLDAgKzEsOTM5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1 ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvbXNnLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K KyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAi aWd0X21hcC5oIgorI2luY2x1ZGUgImludGVsX2FsbG9jYXRvci5oIgorI2luY2x1ZGUgImludGVs X2FsbG9jYXRvcl9tc2djaGFubmVsLmgiCisKKy8vI2RlZmluZSBBTExPQ0RCRworI2lmZGVmIEFM TE9DREJHCisjZGVmaW5lIGFsbG9jX2luZm8gaWd0X2luZm8KKyNkZWZpbmUgYWxsb2NfZGVidWcg aWd0X2RlYnVnCitzdGF0aWMgY29uc3QgY2hhciAqcmVxdHlwZV9zdHJbXSA9IHsKKwlbUkVRX1NU T1BdCQk9ICJzdG9wIiwKKwlbUkVRX09QRU5dCQk9ICJvcGVuIiwKKwlbUkVRX0NMT1NFXQkJPSAi Y2xvc2UiLAorCVtSRVFfUkVNT1ZFX0hBTkRMRV0JPSAicmVtb3ZlIGhhbmRsZSIsCisJW1JFUV9B RERSRVNTX1JBTkdFXQk9ICJhZGRyZXNzIHJhbmdlIiwKKwlbUkVRX0FMTE9DXQkJPSAiYWxsb2Mi LAorCVtSRVFfRlJFRV0JCT0gImZyZWUiLAorCVtSRVFfSVNfQUxMT0NBVEVEXQk9ICJpcyBhbGxv Y2F0ZWQiLAorCVtSRVFfUkVTRVJWRV0JCT0gInJlc2VydmUiLAorCVtSRVFfVU5SRVNFUlZFXQkJ PSAidW5yZXNlcnZlIiwKKwlbUkVRX1JFU0VSVkVfSUZfTk9UX0FMTE9DQVRFRF0gPSAicmVzZXJ2 ZS1pbmEiLAorCVtSRVFfSVNfUkVTRVJWRURdCT0gImlzIHJlc2VydmVkIiwKK307CitzdGF0aWMg aW5saW5lIGNvbnN0IGNoYXIgKnJlcXN0cihlbnVtIHJlcXR5cGUgcmVxdWVzdF90eXBlKQorewor CWlndF9hc3NlcnQocmVxdWVzdF90eXBlID49IFJFUV9TVE9QICYmIHJlcXVlc3RfdHlwZSA8PSBS RVFfSVNfUkVTRVJWRUQpOworCXJldHVybiByZXF0eXBlX3N0cltyZXF1ZXN0X3R5cGVdOworfQor I2Vsc2UKKyNkZWZpbmUgYWxsb2NfaW5mbyguLi4pIHt9CisjZGVmaW5lIGFsbG9jX2RlYnVnKC4u Likge30KKyNlbmRpZgorCitzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppbnRlbF9hbGxvY2F0b3Jf cmFuZG9tX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IGN0eCk7CitzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yICppbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IGN0eCk7 CisKK3N0YXRpYyBzdHJ1Y3QgaWd0X21hcCAqYWxsb2NhdG9yc19tYXA7CitzdGF0aWMgcHRocmVh ZF9tdXRleF90IG1hcF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMg Ym9vbCBtdWx0aXByb2Nlc3M7CitzdGF0aWMgcHRocmVhZF90IGFsbG9jYXRvcl90aHJlYWQ7CisK K3N0YXRpYyBib29sIHdhcm5faWZfbm90X2VtcHR5OworCisvKiBGb3IgYWxsb2NhdG9yIHB1cnBv c2VzIHdlIG5lZWQgdG8gdHJhY2sgcGlkL3RpZCAqLworc3RhdGljIHBpZF90IGFsbG9jYXRvcl9w aWQgPSAtMTsKK2V4dGVybiBwaWRfdCBjaGlsZF9waWQ7CitleHRlcm4gX190aHJlYWQgcGlkX3Qg Y2hpbGRfdGlkOworCitzdGF0aWMgc3RydWN0IG1zZ19jaGFubmVsICpjaGFubmVsOworCitzdGF0 aWMgaW50IHNlbmRfYWxsb2Nfc3RvcChzdHJ1Y3QgbXNnX2NoYW5uZWwgKm1zZ2NoYW4pCit7CisJ c3RydWN0IGFsbG9jX3JlcSByZXEgPSB7MH07CisKKwlyZXEucmVxdWVzdF90eXBlID0gUkVRX1NU T1A7CisKKwlyZXR1cm4gbXNnY2hhbi0+c2VuZF9yZXEobXNnY2hhbiwgJnJlcSk7Cit9CisKK3N0 YXRpYyBpbnQgc2VuZF9yZXEoc3RydWN0IG1zZ19jaGFubmVsICptc2djaGFuLCBwaWRfdCB0aWQs CisJCSAgICBzdHJ1Y3QgYWxsb2NfcmVxICpyZXF1ZXN0KQoreworCXJlcXVlc3QtPnRpZCA9IHRp ZDsKKwlyZXR1cm4gbXNnY2hhbi0+c2VuZF9yZXEobXNnY2hhbiwgcmVxdWVzdCk7Cit9CisKK3N0 YXRpYyBpbnQgcmVjdl9yZXEoc3RydWN0IG1zZ19jaGFubmVsICptc2djaGFuLCBzdHJ1Y3QgYWxs b2NfcmVxICpyZXF1ZXN0KQoreworCXJldHVybiBtc2djaGFuLT5yZWN2X3JlcShtc2djaGFuLCBy ZXF1ZXN0KTsKK30KKworc3RhdGljIGludCBzZW5kX3Jlc3Aoc3RydWN0IG1zZ19jaGFubmVsICpt c2djaGFuLAorCQkgICAgIHBpZF90IHRpZCwgc3RydWN0IGFsbG9jX3Jlc3AgKnJlc3BvbnNlKQor eworCXJlc3BvbnNlLT50aWQgPSB0aWQ7CisJcmV0dXJuIG1zZ2NoYW4tPnNlbmRfcmVzcChtc2dj aGFuLCByZXNwb25zZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9yZXNwKHN0cnVjdCBtc2dfY2hh bm5lbCAqbXNnY2hhbiwKKwkJICAgICBwaWRfdCB0aWQsIHN0cnVjdCBhbGxvY19yZXNwICpyZXNw b25zZSkKK3sKKwlyZXNwb25zZS0+dGlkID0gdGlkOworCXJldHVybiBtc2djaGFuLT5yZWN2X3Jl c3AobXNnY2hhbiwgcmVzcG9uc2UpOworfQorCitzdGF0aWMgc3RydWN0IGludGVsX2FsbG9jYXRv ciAqaW50ZWxfYWxsb2NhdG9yX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IGN0eCwKKwkJCQkJCSAg ICAgIHVpbnQ4X3QgYWxsb2NhdG9yX3R5cGUpCit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvciAq aWFsOworCisJc3dpdGNoIChhbGxvY2F0b3JfdHlwZSkgeworCWNhc2UgSU5URUxfQUxMT0NBVE9S X05PTkU6CisJCWlndF9hc3NlcnRfZihhbGxvY2F0b3JfdHlwZSAhPSBJTlRFTF9BTExPQ0FUT1Jf Tk9ORSwKKwkJCSAgICAgIkJ1ZywgdHJ5aW5nIHRvIHVzZSBhbGxvY2F0b3Igd2l0aCByZWxvY2F0 aW9ucyIpOworCQlicmVhazsKKwljYXNlIElOVEVMX0FMTE9DQVRPUl9SQU5ET006CisJCWlhbCA9 IGludGVsX2FsbG9jYXRvcl9yYW5kb21fY3JlYXRlKGZkLCBjdHgpOworCQlicmVhazsKKwljYXNl IElOVEVMX0FMTE9DQVRPUl9TSU1QTEU6CisJCWlhbCA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVf Y3JlYXRlKGZkLCBjdHgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0X2YoaWFs LCAiQWxsb2NhdG9yIHR5cGUgJWQgbm90IGltcGxlbWVudGVkXG4iLAorCQkJICAgICBhbGxvY2F0 b3JfdHlwZSk7CisJCWJyZWFrOworCX0KKworCWlhbC0+dHlwZSA9IGFsbG9jYXRvcl90eXBlOwor CWF0b21pY19mZXRjaF9hZGQoJmlhbC0+cmVmY291bnQsIDEpOworCXB0aHJlYWRfbXV0ZXhfaW5p dCgmaWFsLT5tdXRleCwgTlVMTCk7CisKKwlpZ3RfbWFwX2FkZChhbGxvY2F0b3JzX21hcCwgaWFs LCBpYWwpOworCisJcmV0dXJuIGlhbDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfYWxsb2NhdG9y X2Rlc3Ryb3koc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsKQoreworCWFsbG9jX2luZm8oIkRl c3Ryb3lpbmcgYWxsb2NhdG9yIChlbXB0eTogJWQpXG4iLAorCQkgICBpYWwtPmlzX2VtcHR5KGlh bCkpOworCisJaWFsLT5kZXN0cm95KGlhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICpfX2FsbG9jYXRvcl9nZXQoaW50IGZkLCB1aW50MzJfdCBjdHgpCit7CisJc3RydWN0 IGludGVsX2FsbG9jYXRvciAqaWFsLCBpYWxzID0geyAuZmQgPSBmZCwgLmN0eCA9IGN0eCB9Owor CWludCByZWZjb3VudDsKKworCWlhbCA9IGlndF9tYXBfZmluZChhbGxvY2F0b3JzX21hcCwgJmlh bHMpOworCWlmICghaWFsKQorCQlnb3RvIG91dF9nZXQ7CisKKwlyZWZjb3VudCA9IGF0b21pY19m ZXRjaF9hZGQoJmlhbC0+cmVmY291bnQsIDEpOworCWlndF9hc3NlcnQocmVmY291bnQgPiAwKTsK Kworb3V0X2dldDoKKworCXJldHVybiBpYWw7Cit9CisKK3N0YXRpYyBib29sIF9fYWxsb2NhdG9y X3B1dChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwpCit7CisJc3RydWN0IGludGVsX2FsbG9j YXRvciBpYWxzID0geyAuZmQgPSBpYWwtPmZkLCAuY3R4ID0gaWFsLT5jdHggfTsKKwlib29sIHJl bGVhc2VkID0gZmFsc2U7CisJaW50IHJlZmNvdW50OworCisJaWFsID0gaWd0X21hcF9maW5kKGFs bG9jYXRvcnNfbWFwLCAmaWFscyk7CisJaWd0X2Fzc2VydChpYWwpOworCisJcmVmY291bnQgPSBh dG9taWNfZmV0Y2hfc3ViKCZpYWwtPnJlZmNvdW50LCAxKTsKKwlhbGxvY19kZWJ1ZygiUmVmY291 bnQ6ICVkXG4iLCByZWZjb3VudCk7CisJaWd0X2Fzc2VydChyZWZjb3VudCA+PSAxKTsKKwlpZiAo cmVmY291bnQgPT0gMSkgeworCQlpZ3RfbWFwX2RlbChhbGxvY2F0b3JzX21hcCwgaWFsKTsKKwor CQlpZiAoIWlhbC0+aXNfZW1wdHkoaWFsKSAmJiB3YXJuX2lmX25vdF9lbXB0eSkKKwkJCWlndF93 YXJuKCJBbGxvY2F0b3Igbm90IGNsZWFyIGJlZm9yZSBkZXN0cm95IVxuIik7CisKKwkJcmVsZWFz ZWQgPSB0cnVlOworCX0KKworCXJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIHN0cnVjdCBp bnRlbF9hbGxvY2F0b3IgKmFsbG9jYXRvcl9vcGVuKGludCBmZCwgdWludDMyX3QgY3R4LAorCQkJ CQkgICAgICB1aW50OF90IGFsbG9jYXRvcl90eXBlKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3IgKmlhbDsKKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmbWFwX211dGV4KTsKKworCWlhbCA9IF9f YWxsb2NhdG9yX2dldChmZCwgY3R4KTsKKwlpZiAoaWFsKSB7CisJCWlmIChpYWwtPnR5cGUgIT0g YWxsb2NhdG9yX3R5cGUpCisJCQlwdGhyZWFkX211dGV4X3VubG9jaygmbWFwX211dGV4KTsKKwkJ aWd0X2Fzc2VydF9mKGlhbC0+dHlwZSA9PSBhbGxvY2F0b3JfdHlwZSwKKwkJCSAgICAgIkFsbG9j YXRvciBtdXN0IGJlIHNhbWUgdHlwZSBmb3IgZmQvY3R4XG4iKTsKKwl9IGVsc2UgeworCQlhbGxv Y19kZWJ1ZygiQWxsb2NhdG9yIGZkOiAlZCwgY3R4OiAldSBub3QgZm91bmQsIGNyZWF0aW5nIG9u ZVxuIiwKKwkJCSAgICBmZCwgY3R4KTsKKwkJaWFsID0gaW50ZWxfYWxsb2NhdG9yX2NyZWF0ZShm ZCwgY3R4LCBhbGxvY2F0b3JfdHlwZSk7CisJfQorCisJcHRocmVhZF9tdXRleF91bmxvY2soJm1h cF9tdXRleCk7CisKKwlyZXR1cm4gaWFsOworfQorCitzdGF0aWMgYm9vbCBhbGxvY2F0b3JfY2xv c2UodWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9y ICppYWwgPSBmcm9tX3VzZXJfcG9pbnRlcihhbGxvY2F0b3JfaGFuZGxlKTsKKwlib29sIHJlbGVh c2VkLCBpc19lbXB0eSA9IGZhbHNlOworCisJaWd0X2Fzc2VydChpYWwpOworCisJcHRocmVhZF9t dXRleF9sb2NrKCZtYXBfbXV0ZXgpOworCisJcmVsZWFzZWQgPSBfX2FsbG9jYXRvcl9wdXQoaWFs KTsKKwlpZiAocmVsZWFzZWQpIHsKKwkJaXNfZW1wdHkgPSBpYWwtPmlzX2VtcHR5KGlhbCk7CisJ CWludGVsX2FsbG9jYXRvcl9kZXN0cm95KGlhbCk7CisJfQorCisJcHRocmVhZF9tdXRleF91bmxv Y2soJm1hcF9tdXRleCk7CisKKwlyZXR1cm4gaXNfZW1wdHk7Cit9CisKK3N0YXRpYyBpbnQgc2Vu ZF9yZXFfcmVjdl9yZXNwKHN0cnVjdCBtc2dfY2hhbm5lbCAqbXNnY2hhbiwKKwkJCSAgICAgIHN0 cnVjdCBhbGxvY19yZXEgKnJlcXVlc3QsCisJCQkgICAgICBzdHJ1Y3QgYWxsb2NfcmVzcCAqcmVz cG9uc2UpCit7CisJaW50IHJldDsKKworCXJldCA9IHNlbmRfcmVxKG1zZ2NoYW4sIGNoaWxkX3Rp ZCwgcmVxdWVzdCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWd0X3dhcm4oIkVycm9yIHNlbmRpbmcg cmVxdWVzdCBbdHlwZTogJWRdOiBlcnIgPSAlZCBbJXNdXG4iLAorCQkJIHJlcXVlc3QtPnJlcXVl c3RfdHlwZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSByZWN2X3Jlc3AobXNnY2hhbiwgY2hpbGRfdGlkLCByZXNwb25zZSk7CisJaWYgKHJl dCA8IDApCisJCWlndF93YXJuKCJFcnJvciByZWNlaXZpbmcgcmVzcG9uc2UgW3R5cGU6ICVkXTog ZXJyID0gJWQgWyVzXVxuIiwKKwkJCSByZXF1ZXN0LT5yZXF1ZXN0X3R5cGUsIGVycm5vLCBzdHJl cnJvcihlcnJubykpOworCisJLyoKKwkgKiBUaGlzIGlzIG1haW4gYXNzdW1wdGlvbiAtIHdlIHJl Y2VpdmUgbWVzc2FnZSB3aGljaCBzaXplIG11c3QgYmUgPiAwLgorCSAqIElmIHRoaXMgaXMgZnVs ZmlsbGVkIHdlIHJldHVybiAwIGFzIGEgc3VjY2Vzcy4KKwkgKi8KKwlpZiAocmV0ID4gMCkKKwkJ cmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3JlcXVlc3Qo c3RydWN0IGFsbG9jX3JlcSAqcmVxLCBzdHJ1Y3QgYWxsb2NfcmVzcCAqcmVzcCkKK3sKKwlib29s IHNhbWVfcHJvY2VzcyA9IGNoaWxkX3BpZCA9PSAtMTsKKwlpbnQgcmV0OworCisJbWVtc2V0KHJl c3AsIDAsIHNpemVvZigqcmVzcCkpOworCisJaWYgKHNhbWVfcHJvY2VzcykgeworCQlzdHJ1Y3Qg aW50ZWxfYWxsb2NhdG9yICppYWw7CisJCXVpbnQ2NF90IHN0YXJ0LCBlbmQsIHNpemU7CisJCWJv b2wgYWxsb2NhdGVkLCByZXNlcnZlZCwgdW5yZXNlcnZlZDsKKworCQkvKiBNdXRleCBvbmx5IHdv cmsgb24gYWxsb2NhdG9yIGluc3RhbmNlLCBub3Qgc3RvcC9vcGVuL2Nsb3NlICovCisJCWlmIChy ZXEtPnJlcXVlc3RfdHlwZSA+IFJFUV9DTE9TRSkgeworCQkJaWFsID0gZnJvbV91c2VyX3BvaW50 ZXIocmVxLT5hbGxvY2F0b3JfaGFuZGxlKTsKKwkJCWlndF9hc3NlcnQoaWFsKTsKKworCQkJcHRo cmVhZF9tdXRleF9sb2NrKCZpYWwtPm11dGV4KTsKKwkJfQorCisJCXN3aXRjaCAocmVxLT5yZXF1 ZXN0X3R5cGUpIHsKKwkJY2FzZSBSRVFfU1RPUDoKKwkJCWFsbG9jX2luZm8oIjxzdG9wPlxuIik7 CisJCQlicmVhazsKKworCQljYXNlIFJFUV9PUEVOOgorCQkJaWFsID0gYWxsb2NhdG9yX29wZW4o cmVxLT5vcGVuLmZkLCByZXEtPm9wZW4uY3R4LAorCQkJCQkgICAgIHJlcS0+b3Blbi5hbGxvY2F0 b3JfdHlwZSk7CisJCQlpZ3RfYXNzZXJ0KGlhbCk7CisKKwkJCXJlc3AtPnJlc3BvbnNlX3R5cGUg PSBSRVNQX09QRU47CisJCQlyZXNwLT5vcGVuLmFsbG9jYXRvcl9oYW5kbGUgPSB0b191c2VyX3Bv aW50ZXIoaWFsKTsKKwkJCWFsbG9jX2luZm8oIjxvcGVuPiBbdGlkOiAlbGRdIGZkOiAlZCwgY3R4 OiAldSwgYWxsb2NfdHlwZTogJXUsICIKKwkJCQkgICAiYWhuZDogJXAsIHJlZmNudDogJWRcbiIs CisJCQkJICAgKGxvbmcpIHJlcS0+dGlkLCByZXEtPm9wZW4uZmQsIHJlcS0+b3Blbi5jdHgsCisJ CQkJICAgcmVxLT5vcGVuLmFsbG9jYXRvcl90eXBlLCBpYWwsCisJCQkJICAgYXRvbWljX2xvYWQo JmlhbC0+cmVmY291bnQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVRX0NMT1NFOgorCQkJaWFs ID0gZnJvbV91c2VyX3BvaW50ZXIocmVxLT5hbGxvY2F0b3JfaGFuZGxlKTsKKwkJCWlndF9hc3Nl cnQoaWFsKTsKKworCQkJcmVzcC0+cmVzcG9uc2VfdHlwZSA9IFJFU1BfQ0xPU0U7CisJCQlyZXQg PSBhdG9taWNfbG9hZCgmaWFsLT5yZWZjb3VudCk7CisJCQlyZXNwLT5jbG9zZS5pc19lbXB0eSA9 IGFsbG9jYXRvcl9jbG9zZShyZXEtPmFsbG9jYXRvcl9oYW5kbGUpOworCQkJYWxsb2NfaW5mbygi PGNsb3NlPiBbdGlkOiAlbGRdIGFobmQ6ICVwLCBpc19lbXB0eTogJWQsIHJlZmNudDogJWRcbiIs CisJCQkJICAgKGxvbmcpIHJlcS0+dGlkLCBpYWwsIHJlc3AtPmNsb3NlLmlzX2VtcHR5LCByZXQp OworCQkJYnJlYWs7CisKKwkJY2FzZSBSRVFfQUREUkVTU19SQU5HRToKKwkJCXJlc3AtPnJlc3Bv bnNlX3R5cGUgPSBSRVNQX0FERFJFU1NfUkFOR0U7CisJCQlpYWwtPmdldF9hZGRyZXNzX3Jhbmdl KGlhbCwgJnN0YXJ0LCAmZW5kKTsKKwkJCXJlc3AtPmFkZHJlc3NfcmFuZ2Uuc3RhcnQgPSBzdGFy dDsKKwkJCXJlc3AtPmFkZHJlc3NfcmFuZ2UuZW5kID0gZW5kOworCQkJYWxsb2NfaW5mbygiPGFk ZHJlc3MgcmFuZ2U+IFt0aWQ6ICVsZF0gc3RhcnQ6ICUiIFBSSXg2NAorCQkJCSAgICIsIGVuZDog JSIgUFJJZDY0ICJcbiIsIChsb25nKSByZXEtPnRpZCwKKwkJCQkgICBzdGFydCwgZW5kKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgUkVRX0FMTE9DOgorCQkJcmVzcC0+cmVzcG9uc2VfdHlwZSA9IFJF U1BfQUxMT0M7CisJCQlyZXNwLT5hbGxvYy5vZmZzZXQgPSBpYWwtPmFsbG9jKGlhbCwKKwkJCQkJ CQlyZXEtPmFsbG9jLmhhbmRsZSwKKwkJCQkJCQlyZXEtPmFsbG9jLnNpemUsCisJCQkJCQkJcmVx LT5hbGxvYy5hbGlnbm1lbnQpOworCQkJYWxsb2NfaW5mbygiPGFsbG9jPiBbdGlkOiAlbGRdIGhh bmRsZTogJXUsIG9mZnNldDogJSIgUFJJeDY0CisJCQkJICAgIiwgYWxpZ25tZW50OiAlIiBQUkl4 NjQgIlxuIiwKKwkJCQkgICAobG9uZykgcmVxLT50aWQsIHJlcS0+YWxsb2MuaGFuZGxlLAorCQkJ CSAgIHJlc3AtPmFsbG9jLm9mZnNldCwgcmVxLT5hbGxvYy5hbGlnbm1lbnQpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBSRVFfRlJFRToKKwkJCXJlc3AtPnJlc3BvbnNlX3R5cGUgPSBSRVNQX0ZSRUU7 CisJCQlyZXNwLT5mcmVlLmZyZWVkID0gaWFsLT5mcmVlKGlhbCwgcmVxLT5mcmVlLmhhbmRsZSk7 CisJCQlhbGxvY19pbmZvKCI8ZnJlZT4gW3RpZDogJWxkXSBoYW5kbGU6ICV1LCBmcmVlZDogJWRc biIsCisJCQkJICAgKGxvbmcpIHJlcS0+dGlkLCByZXEtPmZyZWUuaGFuZGxlLCByZXNwLT5mcmVl LmZyZWVkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVRX0lTX0FMTE9DQVRFRDoKKwkJCXJlc3At PnJlc3BvbnNlX3R5cGUgPSBSRVNQX0lTX0FMTE9DQVRFRDsKKwkJCWFsbG9jYXRlZCA9IGlhbC0+ aXNfYWxsb2NhdGVkKGlhbCwKKwkJCQkJCSAgICAgIHJlcS0+aXNfYWxsb2NhdGVkLmhhbmRsZSwK KwkJCQkJCSAgICAgIHJlcS0+aXNfYWxsb2NhdGVkLnNpemUsCisJCQkJCQkgICAgICByZXEtPmlz X2FsbG9jYXRlZC5vZmZzZXQpOworCQkJcmVzcC0+aXNfYWxsb2NhdGVkLmFsbG9jYXRlZCA9IGFs bG9jYXRlZDsKKwkJCWFsbG9jX2luZm8oIjxpcyBhbGxvY2F0ZWQ+IFt0aWQ6ICVsZF0gb2Zmc2V0 OiAlIiBQUkl4NjQKKwkJCQkgICAiLCBhbGxvY2F0ZWQ6ICVkXG4iLCAobG9uZykgcmVxLT50aWQs CisJCQkJICAgcmVxLT5pc19hbGxvY2F0ZWQub2Zmc2V0LCBhbGxvY2F0ZWQpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBSRVFfUkVTRVJWRToKKwkJCXJlc3AtPnJlc3BvbnNlX3R5cGUgPSBSRVNQX1JF U0VSVkU7CisJCQlyZXNlcnZlZCA9IGlhbC0+cmVzZXJ2ZShpYWwsCisJCQkJCQlyZXEtPnJlc2Vy dmUuaGFuZGxlLAorCQkJCQkJcmVxLT5yZXNlcnZlLnN0YXJ0LAorCQkJCQkJcmVxLT5yZXNlcnZl LmVuZCk7CisJCQlyZXNwLT5yZXNlcnZlLnJlc2VydmVkID0gcmVzZXJ2ZWQ7CisJCQlhbGxvY19p bmZvKCI8cmVzZXJ2ZT4gW3RpZDogJWxkXSBoYW5kbGU6ICV1LCBzdGFydDogJSIgUFJJeDY0CisJ CQkJICAgIiwgZW5kOiAlIiBQUkl4NjQgIiwgcmVzZXJ2ZWQ6ICVkXG4iLAorCQkJCSAgIChsb25n KSByZXEtPnRpZCwgcmVxLT5yZXNlcnZlLmhhbmRsZSwKKwkJCQkgICByZXEtPnJlc2VydmUuc3Rh cnQsIHJlcS0+cmVzZXJ2ZS5lbmQsIHJlc2VydmVkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVR X1VOUkVTRVJWRToKKwkJCXJlc3AtPnJlc3BvbnNlX3R5cGUgPSBSRVNQX1VOUkVTRVJWRTsKKwkJ CXVucmVzZXJ2ZWQgPSBpYWwtPnVucmVzZXJ2ZShpYWwsCisJCQkJCQkgICAgcmVxLT51bnJlc2Vy dmUuaGFuZGxlLAorCQkJCQkJICAgIHJlcS0+dW5yZXNlcnZlLnN0YXJ0LAorCQkJCQkJICAgIHJl cS0+dW5yZXNlcnZlLmVuZCk7CisJCQlyZXNwLT51bnJlc2VydmUudW5yZXNlcnZlZCA9IHVucmVz ZXJ2ZWQ7CisJCQlhbGxvY19pbmZvKCI8dW5yZXNlcnZlPiBbdGlkOiAlbGRdIGhhbmRsZTogJXUs IHN0YXJ0OiAlIiBQUkl4NjQKKwkJCQkgICAiLCBlbmQ6ICUiIFBSSXg2NCAiLCB1bnJlc2VydmVk OiAlZFxuIiwKKwkJCQkgICAobG9uZykgcmVxLT50aWQsIHJlcS0+dW5yZXNlcnZlLmhhbmRsZSwK KwkJCQkgICByZXEtPnVucmVzZXJ2ZS5zdGFydCwgcmVxLT51bnJlc2VydmUuZW5kLAorCQkJCSAg IHVucmVzZXJ2ZWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRVFfSVNfUkVTRVJWRUQ6CisJCQly ZXNwLT5yZXNwb25zZV90eXBlID0gUkVTUF9JU19SRVNFUlZFRDsKKwkJCXJlc2VydmVkID0gaWFs LT5pc19yZXNlcnZlZChpYWwsCisJCQkJCQkgICAgcmVxLT5pc19yZXNlcnZlZC5zdGFydCwKKwkJ CQkJCSAgICByZXEtPmlzX3Jlc2VydmVkLmVuZCk7CisJCQlyZXNwLT5pc19yZXNlcnZlZC5yZXNl cnZlZCA9IHJlc2VydmVkOworCQkJYWxsb2NfaW5mbygiPGlzIHJlc2VydmVkPiBbdGlkOiAlbGRd IHN0YXJ0OiAlIiBQUkl4NjQKKwkJCQkgICAiLCBlbmQ6ICUiIFBSSXg2NCAiLCByZXNlcnZlZDog JWRcbiIsCisJCQkJICAgKGxvbmcpIHJlcS0+dGlkLCByZXEtPmlzX3Jlc2VydmVkLnN0YXJ0LAor CQkJCSAgIHJlcS0+aXNfcmVzZXJ2ZWQuZW5kLCByZXNlcnZlZCk7CisJCQlicmVhazsKKworCQlj YXNlIFJFUV9SRVNFUlZFX0lGX05PVF9BTExPQ0FURUQ6CisJCQlyZXNwLT5yZXNwb25zZV90eXBl ID0gUkVTUF9SRVNFUlZFX0lGX05PVF9BTExPQ0FURUQ7CisJCQlzaXplID0gREVDQU5PTklDQUwo cmVxLT5yZXNlcnZlLmVuZCkgLSBERUNBTk9OSUNBTChyZXEtPnJlc2VydmUuc3RhcnQpOworCisJ CQlhbGxvY2F0ZWQgPSBpYWwtPmlzX2FsbG9jYXRlZChpYWwsIHJlcS0+cmVzZXJ2ZS5oYW5kbGUs CisJCQkJCQkgICAgICBzaXplLCByZXEtPnJlc2VydmUuc3RhcnQpOworCQkJaWYgKGFsbG9jYXRl ZCkgeworCQkJCXJlc3AtPnJlc2VydmVfaWZfbm90X2FsbG9jYXRlZC5hbGxvY2F0ZWQgPSBhbGxv Y2F0ZWQ7CisJCQkJYWxsb2NfaW5mbygiPHJlc2VydmUgaWYgbm90IGFsbG9jYXRlZD4gW3RpZDog JWxkXSBoYW5kbGU6ICV1ICIKKwkJCQkJICAgInNpemU6ICVseCwgc3RhcnQ6ICUiIFBSSXg2NAor CQkJCQkgICAiLCBlbmQ6ICUiIFBSSXg2NCAiLCBhbGxvY2F0ZWQ6ICVkLCByZXNlcnZlZDogJWRc biIsCisJCQkJCSAgIChsb25nKSByZXEtPnRpZCwgcmVxLT5yZXNlcnZlLmhhbmRsZSwKKwkJCQkJ ICAgKGxvbmcpIHNpemUsIHJlcS0+cmVzZXJ2ZS5zdGFydCwKKwkJCQkJICAgcmVxLT5yZXNlcnZl LmVuZCwgYWxsb2NhdGVkLCBmYWxzZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXJlc2VydmVk ID0gaWFsLT5yZXNlcnZlKGlhbCwKKwkJCQkJCXJlcS0+cmVzZXJ2ZS5oYW5kbGUsCisJCQkJCQly ZXEtPnJlc2VydmUuc3RhcnQsCisJCQkJCQlyZXEtPnJlc2VydmUuZW5kKTsKKwkJCXJlc3AtPnJl c2VydmVfaWZfbm90X2FsbG9jYXRlZC5yZXNlcnZlZCA9IHJlc2VydmVkOworCQkJYWxsb2NfaW5m bygiPHJlc2VydmUgaWYgbm90IGFsbG9jYXRlZD4gW3RpZDogJWxkXSBoYW5kbGU6ICV1IgorCQkJ CSAgICIsIHN0YXJ0OiAlIiBQUkl4NjQKKwkJCQkgICAiLCBlbmQ6ICUiIFBSSXg2NCAiLCBhbGxv Y2F0ZWQ6ICVkLCByZXNlcnZlZDogJWRcbiIsCisJCQkJICAgKGxvbmcpIHJlcS0+dGlkLCByZXEt PnJlc2VydmUuaGFuZGxlLAorCQkJCSAgIHJlcS0+cmVzZXJ2ZS5zdGFydCwgcmVxLT5yZXNlcnZl LmVuZCwKKwkJCQkgICBmYWxzZSwgcmVzZXJ2ZWQpOworCQkJYnJlYWs7CisKKwkJfQorCisJCWlm IChyZXEtPnJlcXVlc3RfdHlwZSA+IFJFUV9DTE9TRSkKKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZpYWwtPm11dGV4KTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBzZW5kX3JlcV9yZWN2 X3Jlc3AoY2hhbm5lbCwgcmVxLCByZXNwKTsKKworCWlmIChyZXQgPCAwKQorCQlleGl0KDApOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQga2lsbF9jaGlsZHJlbihpbnQgc2lnKQor eworCXNpZ25hbChzaWcsIFNJR19JR04pOworCWtpbGwoLWdldHBncnAoKSwgc2lnKTsKKwlzaWdu YWwoc2lnLCBTSUdfREZMKTsKK30KKworc3RhdGljIHZvaWQgKmFsbG9jYXRvcl90aHJlYWRfbG9v cCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBhbGxvY19yZXEgcmVxOworCXN0cnVjdCBhbGxvY19y ZXNwIHJlc3A7CisJaW50IHJldDsKKwkodm9pZCkgZGF0YTsKKworCWFsbG9jX2luZm8oIkFsbG9j YXRvciBwaWQ6ICVsZCwgdGlkOiAlbGRcbiIsCisJCSAgIChsb25nKSBhbGxvY2F0b3JfcGlkLCAo bG9uZykgZ2V0dGlkKCkpOworCWFsbG9jX2luZm8oIkVudGVyaW5nIGFsbG9jYXRvciBsb29wXG4i KTsKKworCXdoaWxlICgxKSB7CisJCXJldCA9IHJlY3ZfcmVxKGNoYW5uZWwsICZyZXEpOworCisJ CWlmIChyZXQgPT0gLTEpIHsKKwkJCWlndF93YXJuKCJFcnJvciByZWNlaXZpbmcgcmVxdWVzdCBp biB0aHJlYWQsIHJldCA9ICVkIFslc11cbiIsCisJCQkJIHJldCwgc3RyZXJyb3IoZXJybm8pKTsK KwkJCWtpbGxfY2hpbGRyZW4oU0lHSU5UKTsKKwkJCXJldHVybiAodm9pZCAqKSAtMTsKKwkJfQor CisJCS8qIEZha2UgbWVzc2FnZSB0byBzdG9wIHRoZSB0aHJlYWQgKi8KKwkJaWYgKHJlcS5yZXF1 ZXN0X3R5cGUgPT0gUkVRX1NUT1ApIHsKKwkJCWFsbG9jX2luZm8oIjxzdG9wIHJlcXVlc3Q+XG4i KTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gaGFuZGxlX3JlcXVlc3QoJnJlcSwgJnJlc3Ap OworCQlpZiAocmV0KSB7CisJCQlpZ3Rfd2FybigiRXJyb3IgaGFuZGxpbmcgcmVxdWVzdCBpbiB0 aHJlYWQsIHJldCA9ICVkIFslc11cbiIsCisJCQkJIHJldCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJ CWJyZWFrOworCQl9CisKKwkJcmV0ID0gc2VuZF9yZXNwKGNoYW5uZWwsIHJlcS50aWQsICZyZXNw KTsKKwkJaWYgKHJldCkgeworCQkJaWd0X3dhcm4oIkVycm9yIHNlbmRpbmcgcmVzcG9uc2UgaW4g dGhyZWFkLCByZXQgPSAlZCBbJXNdXG4iLAorCQkJCSByZXQsIHN0cmVycm9yKGVycm5vKSk7CisK KwkJCWtpbGxfY2hpbGRyZW4oU0lHSU5UKTsKKwkJCXJldHVybiAodm9pZCAqKSAtMTsKKwkJfQor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGludGVsX2FsbG9jYXRvcl9tdWx0aXBy b2Nlc3Nfc3RhcnQ6CisgKgorICogRnVuY3Rpb24gdHVybnMgb24gaW50ZWxfYWxsb2NhdG9yIG11 bHRpcHJvY2VzcyBtb2RlIHdoYXQgbWVhbnMKKyAqIGFsbCBhbGxvY2F0aW9ucyBmcm9tIGNoaWxk cmVuIHByb2Nlc3NlcyBhcmUgcGVyZm9ybWVkIGluIGEgc2VwYXJhdGUgdGhyZWFkCisgKiB3aXRo aW4gbWFpbiBpZ3QgcHJvY2Vzcy4gQ2hpbGRyZW4gYXJlIGF3YXJlIG9mIHRoZSBzaXR1YXRpb24g YW5kIHVzZQorICogc29tZSBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbiBjaGFubmVsIHRvIHNl bmQvcmVjZWl2ZSBtZXNzYWdlcworICogKG9wZW4sIGNsb3NlLCBhbGxvYywgZnJlZSwgLi4uKSB0 by9mcm9tIGFsbG9jYXRvciB0aHJlYWQuCisgKgorICogTXVzdCBiZSB1c2VkIHdoZW4geW91IHdh bnQgdG8gdXNlIGFuIGFsbG9jYXRvciBpbiBub24gc2luZ2xlLXByb2Nlc3MgY29kZS4KKyAqIEFs bCBhbGxvY2F0aW9ucyBpbiB0aHJlYWRzIHNwYXduZWQgaW4gbWFpbiBpZ3QgcHJvY2VzcyBhcmUg aGFuZGxlZCBieQorICogbXV0ZXhpbmcsIG5vdCBieSBzZW5kaW5nL3JlY2VpdmluZyBtZXNzYWdl cyB0by9mcm9tIGFsbG9jYXRvciB0aHJlYWQuCisgKgorICogTm90ZS4gVGhpcyBkZXN0cm95cyBh bGwgcHJldmlvdXNseSBjcmVhdGVkIGFsbG9jYXRvcnMgYW5kIHRoZWlycyBjb250ZW50LgorICov Cit2b2lkIGludGVsX2FsbG9jYXRvcl9tdWx0aXByb2Nlc3Nfc3RhcnQodm9pZCkKK3sKKwlhbGxv Y19pbmZvKCJhbGxvY2F0b3IgbXVsdGlwcm9jZXNzIHN0YXJ0XG4iKTsKKworCWludGVsX2FsbG9j YXRvcl9pbml0KCk7CisKKwltdWx0aXByb2Nlc3MgPSB0cnVlOworCWNoYW5uZWwtPmluaXQoY2hh bm5lbCk7CisKKwlwdGhyZWFkX2NyZWF0ZSgmYWxsb2NhdG9yX3RocmVhZCwgTlVMTCwKKwkJICAg ICAgIGFsbG9jYXRvcl90aHJlYWRfbG9vcCwgTlVMTCk7Cit9CisKKy8qKgorICogaW50ZWxfYWxs b2NhdG9yX211bHRpcHJvY2Vzc19zdG9wOgorICoKKyAqIEZ1bmN0aW9uIHR1cm5zIG9mZiBpbnRl bF9hbGxvY2F0b3IgbXVsdGlwcm9jZXNzIG1vZGUgd2hhdCBtZWFucyBtZWFucworICogc3RvcHBp bmcgYWxsb2NhdG9yIHRocmVhZCBhbmQgZGVpbml0aWFsaXppbmcgaXRzIGRhdGEuCisgKi8KK3Zv aWQgaW50ZWxfYWxsb2NhdG9yX211bHRpcHJvY2Vzc19zdG9wKHZvaWQpCit7CisJYWxsb2NfaW5m bygiYWxsb2NhdG9yIG11bHRpcHJvY2VzcyBzdG9wXG4iKTsKKworCWlmIChtdWx0aXByb2Nlc3Mp IHsKKwkJc2VuZF9hbGxvY19zdG9wKGNoYW5uZWwpOworCQkvKiBEZWluaXQsIHRoaXMgc2hvdWxk IHN0b3AgYWxsIGJsb2NrZWQgc3lzY2FsbHMsIGlmIGFueSAqLworCQljaGFubmVsLT5kZWluaXQo Y2hhbm5lbCk7CisJCXB0aHJlYWRfam9pbihhbGxvY2F0b3JfdGhyZWFkLCBOVUxMKTsKKwkJLyog QnV0IHdlJ3JlIG5vdCBzdXJlIGRvZXMgY2hpbGQgd2lsbCBzdHVjayAqLworCQlraWxsX2NoaWxk cmVuKFNJR0lOVCk7CisJCWlndF93YWl0Y2hpbGRyZW5fdGltZW91dCg1LCAiU3RvcHBpbmcgY2hp bGRyZW4iKTsKKwkJbXVsdGlwcm9jZXNzID0gZmFsc2U7CisJfQorfQorCisvKioKKyAqIGludGVs X2FsbG9jYXRvcl9vcGVuOgorICogQGZkOiBpOTE1IGRlc2NyaXB0b3IKKyAqIEBjdHg6IGNvbnRl eHQKKyAqIEBhbGxvY2F0b3JfdHlwZTogb25lIG9mIElOVEVMX0FMTE9DQVRPUl8qIGRlZmluZQor ICoKKyAqIEZ1bmN0aW9uIG9wZW5zIGFuIGFsbG9jYXRvciBpbnN0YW5jZSBmb3IgZ2l2ZW4gQGZk IGFuZCBAY3R4IGFuZCByZXR1cm5zCisgKiBpdHMgaGFuZGxlLiBJZiB0aGUgYWxsb2NhdG9yIGZv ciBzdWNoIHBhaXIgZG9lc24ndCBleGlzdCBpdCBpcyBjcmVhdGVkCisgKiB3aXRoIHJlZmNvdW50 ID0gMS4gUGFyYWxsZWwgb3BlbnMgcmV0dXJucyBzYW1lIGhhbmRsZSBidW1waW5nIGl0cyByZWZj b3VudC4KKyAqCisgKiBSZXR1cm5zOiB1bmlxdWUgaGFuZGxlIHRvIHRoZSBjdXJyZW50bHkgb3Bl bmVkIGFsbG9jYXRvci4KKyAqLwordWludDY0X3QgaW50ZWxfYWxsb2NhdG9yX29wZW4oaW50IGZk LCB1aW50MzJfdCBjdHgsIHVpbnQ4X3QgYWxsb2NhdG9yX3R5cGUpCit7CisJc3RydWN0IGFsbG9j X3JlcSByZXEgPSB7IC5yZXF1ZXN0X3R5cGUgPSBSRVFfT1BFTiwKKwkJCQkgLm9wZW4uZmQgPSBm ZCwKKwkJCQkgLm9wZW4uY3R4ID0gY3R4LAorCQkJCSAub3Blbi5hbGxvY2F0b3JfdHlwZSA9IGFs bG9jYXRvcl90eXBlIH07CisJc3RydWN0IGFsbG9jX3Jlc3AgcmVzcDsKKworCS8qIEdldCBjaGls ZF90aWQgb25seSBvbmNlIGF0IG9wZW4oKSAqLworCWlmIChjaGlsZF90aWQgPT0gLTEpCisJCWNo aWxkX3RpZCA9IGdldHRpZCgpOworCisJaWd0X2Fzc2VydChoYW5kbGVfcmVxdWVzdCgmcmVxLCAm cmVzcCkgPT0gMCk7CisJaWd0X2Fzc2VydChyZXNwLm9wZW4uYWxsb2NhdG9yX2hhbmRsZSk7CisJ aWd0X2Fzc2VydChyZXNwLnJlc3BvbnNlX3R5cGUgPT0gUkVTUF9PUEVOKTsKKworCXJldHVybiBy ZXNwLm9wZW4uYWxsb2NhdG9yX2hhbmRsZTsKK30KKworLyoqCisgKiBpbnRlbF9hbGxvY2F0b3Jf Y2xvc2U6CisgKiBAYWxsb2NhdG9yX2hhbmRsZTogaGFuZGxlIHRvIHRoZSBhbGxvY2F0b3IgdGhh dCB3aWxsIGJlIGNsb3NlZAorICoKKyAqIEZ1bmN0aW9uIGRlY3JlYXNlcyBhbiBhbGxvY2F0b3Ig cmVmY291bnQgZm9yIHRoZSBnaXZlbiBAaGFuZGxlLgorICogV2hlbiByZWZjb3VudCByZWFjaGVz IHplcm8gYWxsb2NhdG9yIGlzIGNsb3NlZCAoZGVzdHJveWVkKSBhbmQgYWxsCisgKiBhbGxvY2F0 ZWQgLyByZXNlcnZlZCBhcmVhcyBhcmUgZnJlZWQuCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBj bG9zZWQgYWxsb2NhdG9yIHdhcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIGlu dGVsX2FsbG9jYXRvcl9jbG9zZSh1aW50NjRfdCBhbGxvY2F0b3JfaGFuZGxlKQoreworCXN0cnVj dCBhbGxvY19yZXEgcmVxID0geyAucmVxdWVzdF90eXBlID0gUkVRX0NMT1NFLAorCQkJCSAuYWxs b2NhdG9yX2hhbmRsZSA9IGFsbG9jYXRvcl9oYW5kbGUgfTsKKwlzdHJ1Y3QgYWxsb2NfcmVzcCBy ZXNwOworCisJaWd0X2Fzc2VydChoYW5kbGVfcmVxdWVzdCgmcmVxLCAmcmVzcCkgPT0gMCk7CisJ aWd0X2Fzc2VydChyZXNwLnJlc3BvbnNlX3R5cGUgPT0gUkVTUF9DTE9TRSk7CisKKwlyZXR1cm4g cmVzcC5jbG9zZS5pc19lbXB0eTsKK30KKworLyoqCisgKiBpbnRlbF9hbGxvY2F0b3JfZ2V0X2Fk ZHJlc3NfcmFuZ2U6CisgKiBAYWxsb2NhdG9yX2hhbmRsZTogaGFuZGxlIHRvIGFuIGFsbG9jYXRv cgorICogQHN0YXJ0cDogcG9pbnRlciB0byB0aGUgdmFyaWFibGUgd2hlcmUgZnVuY3Rpb24gd3Jp dGVzIHN0YXJ0aW5nIG9mZnNldAorICogQGVuZHA6IHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIHdo ZXJlIGZ1bmN0aW9uIHdyaXRlcyBlbmRpbmcgb2Zmc2V0CisgKgorICogRnVuY3Rpb24gZmlsbHMg QHN0YXJ0cCwgQGVuZHAgd2l0aCByZXNwZWN0aXZlbHksIHN0YXJ0aW5nIGFuZCBlbmRpbmcgb2Zm c2V0CisgKiBvZiB0aGUgYWxsb2NhdG9yIHdvcmtpbmcgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHJh bmdlLgorICoKKyAqIE5vdGUuIEFsbG9jYXRvcnMgd29ya2luZyByYW5nZXMgY2FuIGRpZmZlciBk ZXBlbmRpbmcgb24gdGhlIGRldmljZSBvcgorICogdGhlIGFsbG9jYXRvciB0eXBlIHNvIGJlZm9y ZSByZXNlcnZpbmcgYSBzcGVjaWZpYyBvZmZzZXQgYSBnb29kIHByYWN0aXNlCisgKiBpcyB0byBl bnN1cmUgdGhhdCBhZGRyZXNzIGlzIGJldHdlZW4gYWNjZXB0ZWQgcmFuZ2UuCisgKi8KK3ZvaWQg aW50ZWxfYWxsb2NhdG9yX2dldF9hZGRyZXNzX3JhbmdlKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5k bGUsCisJCQkJICAgICAgIHVpbnQ2NF90ICpzdGFydHAsIHVpbnQ2NF90ICplbmRwKQoreworCXN0 cnVjdCBhbGxvY19yZXEgcmVxID0geyAucmVxdWVzdF90eXBlID0gUkVRX0FERFJFU1NfUkFOR0Us CisJCQkJIC5hbGxvY2F0b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSB9OworCXN0cnVjdCBh bGxvY19yZXNwIHJlc3A7CisKKwlpZ3RfYXNzZXJ0KGhhbmRsZV9yZXF1ZXN0KCZyZXEsICZyZXNw KSA9PSAwKTsKKwlpZ3RfYXNzZXJ0KHJlc3AucmVzcG9uc2VfdHlwZSA9PSBSRVNQX0FERFJFU1Nf UkFOR0UpOworCisJaWYgKHN0YXJ0cCkKKwkJKnN0YXJ0cCA9IHJlc3AuYWRkcmVzc19yYW5nZS5z dGFydDsKKworCWlmIChlbmRwKQorCQkqZW5kcCA9IHJlc3AuYWRkcmVzc19yYW5nZS5lbmQ7Cit9 CisKKy8qKgorICogaW50ZWxfYWxsb2NhdG9yX2FsbG9jOgorICogQGFsbG9jYXRvcl9oYW5kbGU6 IGhhbmRsZSB0byBhbiBhbGxvY2F0b3IKKyAqIEBoYW5kbGU6IGhhbmRsZSB0byBhbiBvYmplY3QK KyAqIEBzaXplOiBzaXplIG9mIGFuIG9iamVjdAorICogQGFsaWdubWVudDogZGV0ZXJtaW5lcyBv YmplY3QgYWxpZ25tZW50CisgKgorICogRnVuY3Rpb24gZmluZHMgYW5kIHJldHVybnMgdGhlIG1v c3Qgc3VpdGFibGUgb2Zmc2V0IHdpdGggZ2l2ZW4gQGFsaWdubWVudAorICogZm9yIGFuIG9iamVj dCB3aXRoIEBzaXplIGlkZW50aWZpZWQgYnkgdGhlIEBoYW5kbGUuCisgKgorICogUmV0dXJuczog Y3VycmVudGx5IGFzc2lnbmVkIGFkZHJlc3MgZm9yIGEgZ2l2ZW4gb2JqZWN0LiBJZiBhbiBvYmpl Y3Qgd2FzCisgKiBhbHJlYWR5IGFsbG9jYXRlZCByZXR1cm5zIHNhbWUgYWRkcmVzcy4KKyAqLwor dWludDY0X3QgaW50ZWxfYWxsb2NhdG9yX2FsbG9jKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUs IHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBhbGln bm1lbnQpCit7CisJc3RydWN0IGFsbG9jX3JlcSByZXEgPSB7IC5yZXF1ZXN0X3R5cGUgPSBSRVFf QUxMT0MsCisJCQkJIC5hbGxvY2F0b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkg LmFsbG9jLmhhbmRsZSA9IGhhbmRsZSwKKwkJCQkgLmFsbG9jLnNpemUgPSBzaXplLAorCQkJCSAu YWxsb2MuYWxpZ25tZW50ID0gYWxpZ25tZW50IH07CisJc3RydWN0IGFsbG9jX3Jlc3AgcmVzcDsK KworCWlndF9hc3NlcnQoaGFuZGxlX3JlcXVlc3QoJnJlcSwgJnJlc3ApID09IDApOworCWlndF9h c3NlcnQocmVzcC5yZXNwb25zZV90eXBlID09IFJFU1BfQUxMT0MpOworCisJcmV0dXJuIHJlc3Au YWxsb2Mub2Zmc2V0OworfQorCisvKioKKyAqIGludGVsX2FsbG9jYXRvcl9mcmVlOgorICogQGFs bG9jYXRvcl9oYW5kbGU6IGhhbmRsZSB0byBhbiBhbGxvY2F0b3IKKyAqIEBoYW5kbGU6IGhhbmRs ZSB0byBhbiBvYmplY3QgdG8gYmUgZnJlZWQKKyAqCisgKiBGdW5jdGlvbiBmcmVlIG9iamVjdCBp ZGVudGlmaWVkIGJ5IHRoZSBAaGFuZGxlIGluIGFsbG9jYXRvciB3aGF0IG1ha2VzIGl0CisgKiBv ZmZzZXQgYWdhaW4gYWxsb2NhYmxlLgorICoKKyAqIE5vdGUuIFJlc2VydmVkIG9iamVjdHMgY2Fu IG9ubHkgYmUgZnJlZWQgYnkgYW4gI2ludGVsX2FsbG9jYXRvcl91bnJlc2VydmUKKyAqIGZ1bmN0 aW9uLgorICoKKyAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9iamVjdCB3YXMgc3VjY2Vzc2Z1bGx5 IGZyZWVkLCBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wgaW50ZWxfYWxsb2NhdG9yX2ZyZWUo dWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSwgdWludDMyX3QgaGFuZGxlKQoreworCXN0cnVjdCBh bGxvY19yZXEgcmVxID0geyAucmVxdWVzdF90eXBlID0gUkVRX0ZSRUUsCisJCQkJIC5hbGxvY2F0 b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkgLmZyZWUuaGFuZGxlID0gaGFuZGxl IH07CisJc3RydWN0IGFsbG9jX3Jlc3AgcmVzcDsKKworCWlndF9hc3NlcnQoaGFuZGxlX3JlcXVl c3QoJnJlcSwgJnJlc3ApID09IDApOworCWlndF9hc3NlcnQocmVzcC5yZXNwb25zZV90eXBlID09 IFJFU1BfRlJFRSk7CisKKwlyZXR1cm4gcmVzcC5mcmVlLmZyZWVkOworfQorCisvKioKKyAqIGlu dGVsX2FsbG9jYXRvcl9pc19hbGxvY2F0ZWQ6CisgKiBAYWxsb2NhdG9yX2hhbmRsZTogaGFuZGxl IHRvIGFuIGFsbG9jYXRvcgorICogQGhhbmRsZTogaGFuZGxlIHRvIGFuIG9iamVjdAorICogQHNp emU6IHNpemUgb2YgYW4gb2JqZWN0CisgKiBAb2Zmc2V0OiBhZGRyZXNzIG9mIGFuIG9iamVjdAor ICoKKyAqIEZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgaWRlbnRpZmllZCBieSB0 aGUgQGhhbmRsZSBhbmQgQHNpemUKKyAqIGlzIGFsbG9jYXRlZCBhdCB0aGUgQG9mZnNldC4KKyAq CisgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgY3VycmVudGx5IGFsbG9jYXRlZCBh dCB0aGUgQG9mZnNldCwKKyAqIG90aGVyd2lzZSBmYWxzZS4KKyAqLworYm9vbCBpbnRlbF9hbGxv Y2F0b3JfaXNfYWxsb2NhdGVkKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUsIHVpbnQzMl90IGhh bmRsZSwKKwkJCQkgIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90IG9mZnNldCkKK3sKKwlzdHJ1Y3Qg YWxsb2NfcmVxIHJlcSA9IHsgLnJlcXVlc3RfdHlwZSA9IFJFUV9JU19BTExPQ0FURUQsCisJCQkJ IC5hbGxvY2F0b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkgLmlzX2FsbG9jYXRl ZC5oYW5kbGUgPSBoYW5kbGUsCisJCQkJIC5pc19hbGxvY2F0ZWQuc2l6ZSA9IHNpemUsCisJCQkJ IC5pc19hbGxvY2F0ZWQub2Zmc2V0ID0gb2Zmc2V0IH07CisJc3RydWN0IGFsbG9jX3Jlc3AgcmVz cDsKKworCWlndF9hc3NlcnQoaGFuZGxlX3JlcXVlc3QoJnJlcSwgJnJlc3ApID09IDApOworCWln dF9hc3NlcnQocmVzcC5yZXNwb25zZV90eXBlID09IFJFU1BfSVNfQUxMT0NBVEVEKTsKKworCXJl dHVybiByZXNwLmlzX2FsbG9jYXRlZC5hbGxvY2F0ZWQ7Cit9CisKKy8qKgorICogaW50ZWxfYWxs b2NhdG9yX3Jlc2VydmU6CisgKiBAYWxsb2NhdG9yX2hhbmRsZTogaGFuZGxlIHRvIGFuIGFsbG9j YXRvcgorICogQGhhbmRsZTogaGFuZGxlIHRvIGFuIG9iamVjdAorICogQHNpemU6IHNpemUgb2Yg YW4gb2JqZWN0CisgKiBAb2Zmc2V0OiBhZGRyZXNzIG9mIGFuIG9iamVjdAorICoKKyAqIEZ1bmN0 aW9uIHJlc2VydmVzIHNwYWNlIHRoYXQgc3RhcnRzIGF0IHRoZSBAb2Zmc2V0IGFuZCBoYXMgQHNp emUuCisgKiBPcHRpb25hbGx5IHdlIGNhbiBwYXNzIEBoYW5kbGUgdG8gbWFyayB0aGF0IHNwYWNl IGlzIGZvciBhIHNwZWNpZmljCisgKiBvYmplY3QsIG90aGVyd2lzZSBwYXNzIC0xLgorICoKKyAq IE5vdGUuIFJlc2VydmVkIHNwYWNlIGlzIGlkZW50aWZpZWQgYnkgb2Zmc2V0IGFuZCBzaXplLCBu b3QgYSBoYW5kbGUuCisgKiBTbyBhbiBvYmplY3QgY2FuIGhhdmUgbXVsdGlwbGUgcmVzZXJ2ZWQg c3BhY2VzIHdpdGggaXRzIGhhbmRsZS4KKyAqCisgKiBSZXR1cm5zOiB0cnVlIGlmIHNwYWNlIGlz IHN1Y2Nlc3NmdWxseSByZXNlcnZlZCwgb3RoZXJ3aXNlIGZhbHNlLgorICovCitib29sIGludGVs X2FsbG9jYXRvcl9yZXNlcnZlKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUsIHVpbnQzMl90IGhh bmRsZSwKKwkJCSAgICAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQoreworCXN0cnVj dCBhbGxvY19yZXEgcmVxID0geyAucmVxdWVzdF90eXBlID0gUkVRX1JFU0VSVkUsCisJCQkJIC5h bGxvY2F0b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkgLnJlc2VydmUuaGFuZGxl ID0gaGFuZGxlLAorCQkJCSAucmVzZXJ2ZS5zdGFydCA9IG9mZnNldCwKKwkJCQkgLnJlc2VydmUu ZW5kID0gb2Zmc2V0ICsgc2l6ZSB9OworCXN0cnVjdCBhbGxvY19yZXNwIHJlc3A7CisKKwlpZ3Rf YXNzZXJ0KGhhbmRsZV9yZXF1ZXN0KCZyZXEsICZyZXNwKSA9PSAwKTsKKwlpZ3RfYXNzZXJ0KHJl c3AucmVzcG9uc2VfdHlwZSA9PSBSRVNQX1JFU0VSVkUpOworCisJcmV0dXJuIHJlc3AucmVzZXJ2 ZS5yZXNlcnZlZDsKK30KKworLyoqCisgKiBpbnRlbF9hbGxvY2F0b3JfdW5yZXNlcnZlOgorICog QGFsbG9jYXRvcl9oYW5kbGU6IGhhbmRsZSB0byBhbiBhbGxvY2F0b3IKKyAqIEBoYW5kbGU6IGhh bmRsZSB0byBhbiBvYmplY3QKKyAqIEBzaXplOiBzaXplIG9mIGFuIG9iamVjdAorICogQG9mZnNl dDogYWRkcmVzcyBvZiBhbiBvYmplY3QKKyAqCisgKiBGdW5jdGlvbiB1bnJlc2VydmVzIHNwYWNl IHRoYXQgc3RhcnRzIGF0IHRoZSBAb2Zmc2V0LCBAc2l6ZSBhbmQgQGhhbmRsZS4KKyAqCisgKiBO b3RlLiBAaGFuZGxlLCBAc2l6ZSBhbmQgQG9mZnNldCBoYXZlIHRvIG1hdGNoIHRob3NlIHVzZWQg aW4gcmVzZXJ2YXRpb24uCisgKiBpLmUuIGNoZWNrIHdpdGggdGhlIHNhbWUgb2Zmc2V0IGJ1dCBl dmVuIHNtYWxsZXIgc2l6ZSB3aWxsIGZhaWwuCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiB0aGUg c3BhY2UgaXMgc3VjY2Vzc2Z1bGx5IHVucmVzZXJ2ZWQsIG90aGVyd2lzZSBmYWxzZS4KKyAqLwor Ym9vbCBpbnRlbF9hbGxvY2F0b3JfdW5yZXNlcnZlKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUs IHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZz ZXQpCit7CisJc3RydWN0IGFsbG9jX3JlcSByZXEgPSB7IC5yZXF1ZXN0X3R5cGUgPSBSRVFfVU5S RVNFUlZFLAorCQkJCSAuYWxsb2NhdG9yX2hhbmRsZSA9IGFsbG9jYXRvcl9oYW5kbGUsCisJCQkJ IC51bnJlc2VydmUuaGFuZGxlID0gaGFuZGxlLAorCQkJCSAudW5yZXNlcnZlLnN0YXJ0ID0gb2Zm c2V0LAorCQkJCSAudW5yZXNlcnZlLmVuZCA9IG9mZnNldCArIHNpemUgfTsKKwlzdHJ1Y3QgYWxs b2NfcmVzcCByZXNwOworCisJaWd0X2Fzc2VydChoYW5kbGVfcmVxdWVzdCgmcmVxLCAmcmVzcCkg PT0gMCk7CisJaWd0X2Fzc2VydChyZXNwLnJlc3BvbnNlX3R5cGUgPT0gUkVTUF9VTlJFU0VSVkUp OworCisJcmV0dXJuIHJlc3AudW5yZXNlcnZlLnVucmVzZXJ2ZWQ7Cit9CisKKy8qKgorICogaW50 ZWxfYWxsb2NhdG9yX2lzX3Jlc2VydmVkOgorICogQGFsbG9jYXRvcl9oYW5kbGU6IGhhbmRsZSB0 byBhbiBhbGxvY2F0b3IKKyAqIEBzaXplOiBzaXplIG9mIGFuIG9iamVjdAorICogQG9mZnNldDog YWRkcmVzcyBvZiBhbiBvYmplY3QKKyAqCisgKiBGdW5jdGlvbiBjaGVja3Mgd2hldGhlciBzcGFj ZSBzdGFydGluZyBhdCB0aGUgQG9mZnNldCBhbmQgQHNpemUgaXMKKyAqIGN1cnJlbnRseSB1bmRl ciByZXNlcnZhdGlvbi4KKyAqCisgKiBOb3RlLiBAc2l6ZSBhbmQgQG9mZnNldCBoYXZlIHRvIG1h dGNoIHRob3NlIHVzZWQgaW4gcmVzZXJ2YXRpb24sCisgKiBpLmUuIGNoZWNrIHdpdGggdGhlIHNh bWUgb2Zmc2V0IGJ1dCBldmVuIHNtYWxsZXIgc2l6ZSB3aWxsIGZhaWwuCisgKgorICogUmV0dXJu czogdHJ1ZSBpZiBzcGFjZSBpcyByZXNlcnZlZCwgb3Rod2VyaXNlIGZhbHNlLgorICovCitib29s IGludGVsX2FsbG9jYXRvcl9pc19yZXNlcnZlZCh1aW50NjRfdCBhbGxvY2F0b3JfaGFuZGxlLAor CQkJCSB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZzZXQpCit7CisJc3RydWN0IGFsbG9jX3Jl cSByZXEgPSB7IC5yZXF1ZXN0X3R5cGUgPSBSRVFfSVNfUkVTRVJWRUQsCisJCQkJIC5hbGxvY2F0 b3JfaGFuZGxlID0gYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkgLmlzX3Jlc2VydmVkLnN0YXJ0ID0g b2Zmc2V0LAorCQkJCSAuaXNfcmVzZXJ2ZWQuZW5kID0gb2Zmc2V0ICsgc2l6ZSB9OworCXN0cnVj dCBhbGxvY19yZXNwIHJlc3A7CisKKwlpZ3RfYXNzZXJ0KGhhbmRsZV9yZXF1ZXN0KCZyZXEsICZy ZXNwKSA9PSAwKTsKKwlpZ3RfYXNzZXJ0KHJlc3AucmVzcG9uc2VfdHlwZSA9PSBSRVNQX0lTX1JF U0VSVkVEKTsKKworCXJldHVybiByZXNwLmlzX3Jlc2VydmVkLnJlc2VydmVkOworfQorCisvKioK KyAqIGludGVsX2FsbG9jYXRvcl9yZXNlcnZlX2lmX25vdF9hbGxvY2F0ZWQ6CisgKiBAYWxsb2Nh dG9yX2hhbmRsZTogaGFuZGxlIHRvIGFuIGFsbG9jYXRvcgorICogQGhhbmRsZTogaGFuZGxlIHRv IGFuIG9iamVjdAorICogQHNpemU6IHNpemUgb2YgYW4gb2JqZWN0CisgKiBAb2Zmc2V0OiBhZGRy ZXNzIG9mIGFuIG9iamVjdAorICogQGlzX2FsbG9jYXRlZHA6IGlmIG5vdCBOVUxMIGZ1bmN0aW9u IHdyaXRlcyB0aGVyZSBvYmplY3QgYWxsb2NhdGlvbiBzdGF0dXMKKyAqICh0cnVlL2ZhbHNlKQor ICoKKyAqIEZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgaWRlbnRpZmllZCBieSB0 aGUgQGhhbmRsZSBhbmQgQHNpemUKKyAqIGlzIGFsbG9jYXRlZCBhdCB0aGUgQG9mZnNldCBhbmQg d3JpdGVzIHRoZSByZXN1bHQgdG8gQGlzX2FsbG9jYXRlZHAuCisgKiBJZiBpdCdzIG5vdCBpdCBy ZXNlcnZlcyBpdCBhdCB0aGUgZ2l2ZW4gQG9mZnNldC4KKyAqCisgKiBSZXR1cm5zOiB0cnVlIGlm IHRoZSBzcGFjZSBmb3IgYW4gb2JqZWN0IHdhcyByZXNlcnZlZCwgb3RoZXJ3aXNlIGZhbHNlLgor ICovCitib29sIGludGVsX2FsbG9jYXRvcl9yZXNlcnZlX2lmX25vdF9hbGxvY2F0ZWQodWludDY0 X3QgYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkJICAgICAgdWludDMyX3QgaGFuZGxlLAorCQkJCQkg ICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZzZXQsCisJCQkJCSAgICAgIGJvb2wgKmlz X2FsbG9jYXRlZHApCit7CisJc3RydWN0IGFsbG9jX3JlcSByZXEgPSB7IC5yZXF1ZXN0X3R5cGUg PSBSRVFfUkVTRVJWRV9JRl9OT1RfQUxMT0NBVEVELAorCQkJCSAuYWxsb2NhdG9yX2hhbmRsZSA9 IGFsbG9jYXRvcl9oYW5kbGUsCisJCQkJIC5yZXNlcnZlLmhhbmRsZSA9IGhhbmRsZSwKKwkJCQkg LnJlc2VydmUuc3RhcnQgPSBvZmZzZXQsCisJCQkJIC5yZXNlcnZlLmVuZCA9IG9mZnNldCArIHNp emUgfTsKKwlzdHJ1Y3QgYWxsb2NfcmVzcCByZXNwOworCisJaWd0X2Fzc2VydChoYW5kbGVfcmVx dWVzdCgmcmVxLCAmcmVzcCkgPT0gMCk7CisJaWd0X2Fzc2VydChyZXNwLnJlc3BvbnNlX3R5cGUg PT0gUkVTUF9SRVNFUlZFX0lGX05PVF9BTExPQ0FURUQpOworCisJaWYgKGlzX2FsbG9jYXRlZHAp CisJCSppc19hbGxvY2F0ZWRwID0gcmVzcC5yZXNlcnZlX2lmX25vdF9hbGxvY2F0ZWQuYWxsb2Nh dGVkOworCisJcmV0dXJuIHJlc3AucmVzZXJ2ZV9pZl9ub3RfYWxsb2NhdGVkLnJlc2VydmVkOwor fQorCisvKioKKyAqIGludGVsX2FsbG9jYXRvcl9wcmludDoKKyAqIEBhbGxvY2F0b3JfaGFuZGxl OiBoYW5kbGUgdG8gYW4gYWxsb2NhdG9yCisgKgorICogRnVuY3Rpb24gcHJpbnRzIHN0YXRpc3Rp Y3MgYW5kIGNvbnRlbnQgb2YgdGhlIGFsbG9jYXRvci4KKyAqIE1haW5seSBmb3IgZGVidWdnaW5n IHB1cnBvc2VzLgorICoKKyAqIE5vdGUuIFByaW50aW5nIHBvc3NpYmxlIG9ubHkgaW4gdGhlIG1h aW4gcHJvY2Vzcy4KKyAqKi8KK3ZvaWQgaW50ZWxfYWxsb2NhdG9yX3ByaW50KHVpbnQ2NF90IGFs bG9jYXRvcl9oYW5kbGUpCit7CisJYm9vbCBzYW1lX3Byb2Nlc3M7CisKKwlpZ3RfYXNzZXJ0KGFs bG9jYXRvcl9oYW5kbGUpOworCisJc2FtZV9wcm9jZXNzID0gY2hpbGRfcGlkID09IC0xOworCisJ aWYgKCFtdWx0aXByb2Nlc3MgfHwgc2FtZV9wcm9jZXNzKSB7CisJCXN0cnVjdCBpbnRlbF9hbGxv Y2F0b3IgKmlhbCA9IGZyb21fdXNlcl9wb2ludGVyKGFsbG9jYXRvcl9oYW5kbGUpOworCQlwdGhy ZWFkX211dGV4X2xvY2soJm1hcF9tdXRleCk7CisJCWlhbC0+cHJpbnQoaWFsLCB0cnVlKTsKKwkJ cHRocmVhZF9tdXRleF91bmxvY2soJm1hcF9tdXRleCk7CisJfSBlbHNlIHsKKwkJaWd0X3dhcm4o IlByaW50IHN0YXRzIGlzIGluIG1haW4gcHJvY2VzcyBvbmx5XG4iKTsKKwl9Cit9CisKK3N0YXRp YyBib29sIGVxdWFsX2FsbG9jYXRvcnMoY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5 MikKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICphMSA9IGtleTEsICphMiA9IGtl eTI7CisKKwlhbGxvY19kZWJ1ZygiYTE6IDxmZDogJWQsIGN0eDogJXU+LCBhMiA8ZmQ6ICVkLCBj dHg6ICV1PlxuIiwKKwkJICAgYTEtPmZkLCBhMS0+Y3R4LCBhMi0+ZmQsIGEyLT5jdHgpOworCisJ cmV0dXJuIGExLT5mZCA9PSBhMi0+ZmQgJiYgYTEtPmN0eCA9PSBhMi0+Y3R4OworfQorCisvKiAg Ml42MyArIDJeNjEgLSAyXjU3ICsgMl41NCAtIDJeNTEgLSAyXjE4ICsgMSAqLworI2RlZmluZSBH T0xERU5fUkFUSU9fUFJJTUVfNjQgMHg5ZTM3ZmZmZmZmZmMwMDAxVUwKKworc3RhdGljIGlubGlu ZSB1aW50NjRfdCBoYXNoX2FsbG9jYXRvcnMoY29uc3Qgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQg Yml0cykKK3sKKwl1aW50NjRfdCBoYXNoID0gKChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICopIHZh bCktPmZkOworCisJaGFzaCA9IGhhc2ggKiBHT0xERU5fUkFUSU9fUFJJTUVfNjQ7CisJcmV0dXJu IGhhc2ggPj4gKDY0IC0gYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV9hbGxvY2F0b3Jz KHZvaWQpCit7CisJc3RydWN0IGlndF9tYXBfZW50cnkgKnBvczsKKwlzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICppYWw7CisJaW50IGk7CisKKwlpZiAoYWxsb2NhdG9yc19tYXApIHsKKwkJaWd0X21h cF9mb3JfZWFjaChhbGxvY2F0b3JzX21hcCwgaSwgcG9zKSB7CisJCQlpYWwgPSBwb3MtPnZhbHVl OworCQkJaWFsLT5kZXN0cm95KGlhbCk7CisJCX0KKwl9CisKKwlpZ3RfbWFwX2ZyZWUoYWxsb2Nh dG9yc19tYXApOworfQorCisvKioKKyAqIGludGVsX2FsbG9jYXRvcl9pbml0OgorICoKKyAqIEZ1 bmN0aW9uIGluaXRpYWxpemVzIHRoZSBhbGxvY2F0b3JzIGluZnJhc3RydWN0dXJlLiBUaGUgc2Vj b25kIGNhbGwgd2lsbAorICogb3ZlcnJpZGUgY3VycmVudCBpbmZyYSBhbmQgZGVzdHJveSBleGlz dGluZyB0aGVyZSBhbGxvY2F0b3JzLiBJdCBpcyBjYWxsZWQKKyAqIGluIGlndF9jb25zdHJ1Y3Rv ci4KKyAqKi8KK3ZvaWQgaW50ZWxfYWxsb2NhdG9yX2luaXQodm9pZCkKK3sKKwlhbGxvY19pbmZv KCJQcmVwYXJlIGFuIGFsbG9jYXRvciBpbmZyYXN0cnVjdHVyZVxuIik7CisKKwlhbGxvY2F0b3Jf cGlkID0gZ2V0cGlkKCk7CisJYWxsb2NfaW5mbygiQWxsb2NhdG9yIHBpZDogJWxkXG4iLCAobG9u ZykgYWxsb2NhdG9yX3BpZCk7CisKKwlpZiAoYWxsb2NhdG9yc19tYXApIHsKKwkJX19mcmVlX2Fs bG9jYXRvcnMoKTsKKwkJZnJlZShhbGxvY2F0b3JzX21hcCk7CisJfQorCisJYWxsb2NhdG9yc19t YXAgPSBjYWxsb2Moc2l6ZW9mKCphbGxvY2F0b3JzX21hcCksIDEpOworCWlndF9hc3NlcnQoYWxs b2NhdG9yc19tYXApOworCisJaWd0X21hcF9pbml0KGFsbG9jYXRvcnNfbWFwLCBlcXVhbF9hbGxv Y2F0b3JzLCBoYXNoX2FsbG9jYXRvcnMsIDgpOworCisJY2hhbm5lbCA9IGludGVsX2FsbG9jYXRv cl9nZXRfbXNnY2hhbm5lbChDSEFOTkVMX1NZU1ZJUENfTVNHUVVFVUUpOworfQorCitpZ3RfY29u c3RydWN0b3IgeworCWludGVsX2FsbG9jYXRvcl9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9saWIv aW50ZWxfYWxsb2NhdG9yLmggYi9saWIvaW50ZWxfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAuLmYzNzQ3YThiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lu dGVsX2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZuZGVmIF9fSU5URUxfQUxMT0NB VE9SX0hfXworI2RlZmluZSBfX0lOVEVMX0FMTE9DQVRPUl9IX18KKworI2luY2x1ZGUgPHN0ZGlu dC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVk ZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYXRvbWljLmg+CisKKy8qKgorICogU0VDVElPTjpp bnRlbF9hbGxvY2F0b3IKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogaWd0IGltcGxlbWVudGF0aW9u IG9mIGFsbG9jYXRvcgorICogQHRpdGxlOiBJbnRlbCBhbGxvY2F0b3IKKyAqIEBpbmNsdWRlOiBp bnRlbF9hbGxvY2F0b3IuaAorICoKKyAqICMgSW50ZWwgYWxsb2NhdG9yCisgKgorICogU2luY2Ug R1BVIGRldmljZXMgZHJpdmVyIGhhcyBhYmFuZG9uZWQgcmVsb2NhdGlvbnMgZm9yIG5ld2VyIGdl bmVyYXRpb25zLAorICogd2UgYXJlIGZhY2luZyB0aGUgbmVlZCB0byBtYW5hZ2UgYWRkcmVzc2Vz IGluIHVzZXJzcGFjZS4gSW50ZWwgYWxsb2NhdG9yCisgKiBzdXBwbHkgb3V0IG9mIHRoZSBib3gg bWVjaGFuaXNtcyBwcm92aWRpbmcgY29ycmVjdCB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqIFNwZWNp ZmljYWxseSwgaW50ZWxfYWxsb2NhdG9yIGlzIGEgbXVsdGktdGhyZWFkaW5nIGluZnJhc3RydWN0 dXJlIHdyYXBwaW5nCisgKiBhIHByb3BlciBzaW5nbGUtdGhyZWFkIGFsbG9jYXRvciwgdGhhdCBj YW4gYmUgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoKKyAqICAqIElOVEVMX0FMTE9DQVRP Ul9TSU1QTEUgLSBwb3J0ZWQgZnJvbSBNZXNhLCBsaXN0LWJhc2VkLCBzaW1wbGUgYWxsb2NhdG9y CisgKiAgKiBJTlRFTF9BTExPQ0FUT1JfUkFORE9NIC0gc3RhdGVsZXNzIGFsbG9jYXRvciwgdGhh dCBwcm92aWRlcyByYW5kb20gYWRkcmVzc2VzCisgKiAgKHNvbWV0aW1lIGluIHRoZSBmdXR1cmUg dGhlIGxpc3QgY2FuIGdyb3cpCisgKgorICogVXNhZ2UgZXhhbXBsZToKKyAqCisgKiB8WzwhLS0g bGFuZ3VhZ2U9ImMiIC0tPgorICogc3RydWN0IG9iamVjdCB7CisgKiAJdWludDMyX3QgaGFuZGxl OworICogCXVpbnQ2NF90IG9mZnNldDsKKyAqIAl1aW50NjRfdCBzaXplOworICogfTsKKyAqCisg KiBzdHJ1Y3Qgb2JqZWN0IG9iajEsIG9iajI7CisgKiB1aW50NjRfdCBhaG5kLCBzdGFydHAsIGVu ZHA7CisgKiBpbnQgZmQgPSAtMTsKKyAqCisgKiBmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJf SU5URUwpOworICogYWhuZCA9IGludGVsX2FsbG9jYXRvcl9vcGVuKGZkLCAwLCBJTlRFTF9BTExP Q0FUT1JfU0lNUExFKTsKKyAqCisgKiBvYmoxLmhhbmRsZSA9IGdlbV9jcmVhdGUoNDA5Nik7Cisg KiBvYmoyLmhhbmRsZSA9IGdlbV9jcmVhdGUoNDA5Nik7CisgKgorICogLy8gUmVzZXJ2ZSBob2xl IGZvciBhbiBvYmplY3QgaW4gZ2l2ZW4gYWRkcmVzcy4KKyAqIC8vIEluIHRoaXMgZXhhbXBsZSB0 aGUgZmlyc3QgcG9zc2libGUgYWRkcmVzcy4KKyAqIGludGVsX2FsbG9jYXRvcl9nZXRfYWRkcmVz c19yYW5nZShhaG5kLCAmc3RhcnRwLCAmZW5kcCk7CisgKiBvYmoxLm9mZnNldCA9IHN0YXJ0cDsK KyAqIGlndF9hc3NlcnQoaW50ZWxfYWxsb2NhdG9yX3Jlc2VydmUoYWhuZCwgb2JqMS5oYW5kbGUs IDQwOTYsIHN0YXJ0cCkpOworICoKKyAqIC8vIEdldCB0aGUgbW9zdCBzdWl0YWJsZSBvZmZzZXQg Zm9yIHRoZSBvYmplY3QuIFByZWZlcmVkIHdheS4KKyAqIG9iajIub2Zmc2V0ID0gaW50ZWxfYWxs b2NhdG9yX2FsbG9jKGFobmQsIG9iajIuaGFuZGxlLCA0MDk2LCAxIDw8IDEzKTsKKyAqCisgKiAg Li4uCisgKgorICogLy8gUmVzZXJ2ZWQgYWRkcmVzc2VzIGNhbiBiZSBvbmx5IGZyZWVkIGJ5IHVu cmVzZXJ2ZS4KKyAqIGludGVsX2FsbG9jYXRvcl91bnJlc2VydmUoYWhuZCwgb2JqMS5oYW5kbGUs IDQwOTYsIG9iajEub2Zmc2V0KTsKKyAqIGludGVsX2FsbG9jYXRvcl9mcmVlKGFobmQsIG9iajIu aGFuZGxlKTsKKyAqCisgKiBnZW1fY2xvc2Uob2JqMS5oYW5kbGUpOworICogZ2VtX2Nsb3NlKG9i ajIuaGFuZGxlKTsKKyAqIF18CisgKgorICovCisKK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3Igewor CWludCBmZDsKKwl1aW50MzJfdCBjdHg7CisJdWludDhfdCB0eXBlOworCV9BdG9taWMoaW50MzJf dCkgcmVmY291bnQ7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworCisJLyogYWxsb2NhdG9yJ3Mg cHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwl2b2lkICpwcml2OworCisJdm9pZCAoKmdldF9hZGRyZXNz X3JhbmdlKShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJICB1aW50NjRfdCAqc3Rh cnRwLCB1aW50NjRfdCAqZW5kcCk7CisJdWludDY0X3QgKCphbGxvYykoc3RydWN0IGludGVsX2Fs bG9jYXRvciAqaWFsLCB1aW50MzJfdCBoYW5kbGUsCisJCQkgIHVpbnQ2NF90IHNpemUsIHVpbnQ2 NF90IGFsaWdubWVudCk7CisJYm9vbCAoKmlzX2FsbG9jYXRlZCkgKHN0cnVjdCBpbnRlbF9hbGxv Y2F0b3IgKmlhbCwgdWludDMyX3QgaGFuZGxlLAorCQkJICAgICAgdWludDY0X3Qgc2l6ZSwgdWlu dDY0X3QgYWxpZ25tZW50KTsKKwlib29sICgqcmVzZXJ2ZSkoc3RydWN0IGludGVsX2FsbG9jYXRv ciAqaWFsLAorCQkJdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3Qgc2l6 ZSk7CisJYm9vbCAoKnVucmVzZXJ2ZSkoc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLAorCQkJ ICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBzaXplKTsKKwlib29s ICgqaXNfcmVzZXJ2ZWQpIChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkgICAgIHVp bnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBzaXplKTsKKwlib29sICgqZnJlZSkoc3RydWN0IGludGVs X2FsbG9jYXRvciAqaWFsLCB1aW50MzJfdCBoYW5kbGUpOworCisJdm9pZCAoKmRlc3Ryb3kpKHN0 cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCk7CisKKwlib29sICgqaXNfZW1wdHkpKHN0cnVjdCBp bnRlbF9hbGxvY2F0b3IgKmlhbCk7CisKKwl2b2lkICgqcHJpbnQpKHN0cnVjdCBpbnRlbF9hbGxv Y2F0b3IgKmlhbCwgYm9vbCBmdWxsKTsKK307CisKK3ZvaWQgaW50ZWxfYWxsb2NhdG9yX2luaXQo dm9pZCk7Cit2b2lkIGludGVsX2FsbG9jYXRvcl9tdWx0aXByb2Nlc3Nfc3RhcnQodm9pZCk7Cit2 b2lkIGludGVsX2FsbG9jYXRvcl9tdWx0aXByb2Nlc3Nfc3RvcCh2b2lkKTsKKwordWludDY0X3Qg aW50ZWxfYWxsb2NhdG9yX29wZW4oaW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQ4X3QgYWxsb2Nh dG9yX3R5cGUpOworYm9vbCBpbnRlbF9hbGxvY2F0b3JfY2xvc2UodWludDY0X3QgYWxsb2NhdG9y X2hhbmRsZSk7Cit2b2lkIGludGVsX2FsbG9jYXRvcl9nZXRfYWRkcmVzc19yYW5nZSh1aW50NjRf dCBhbGxvY2F0b3JfaGFuZGxlLAorCQkJCSAgICAgICB1aW50NjRfdCAqc3RhcnRwLCB1aW50NjRf dCAqZW5kcCk7Cit1aW50NjRfdCBpbnRlbF9hbGxvY2F0b3JfYWxsb2ModWludDY0X3QgYWxsb2Nh dG9yX2hhbmRsZSwgdWludDMyX3QgaGFuZGxlLAorCQkJICAgICAgIHVpbnQ2NF90IHNpemUsIHVp bnQ2NF90IGFsaWdubWVudCk7Citib29sIGludGVsX2FsbG9jYXRvcl9mcmVlKHVpbnQ2NF90IGFs bG9jYXRvcl9oYW5kbGUsIHVpbnQzMl90IGhhbmRsZSk7Citib29sIGludGVsX2FsbG9jYXRvcl9p c19hbGxvY2F0ZWQodWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSwgdWludDMyX3QgaGFuZGxlLAor CQkJCSAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qgb2Zmc2V0KTsKK2Jvb2wgaW50ZWxfYWxsb2Nh dG9yX3Jlc2VydmUodWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSwgdWludDMyX3QgaGFuZGxlLAor CQkJICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZzZXQpOworYm9vbCBpbnRlbF9hbGxv Y2F0b3JfdW5yZXNlcnZlKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUsIHVpbnQzMl90IGhhbmRs ZSwKKwkJCSAgICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZzZXQpOworYm9vbCBpbnRl bF9hbGxvY2F0b3JfaXNfcmVzZXJ2ZWQodWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkg dWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IHNpemUpOworYm9vbCBpbnRlbF9hbGxvY2F0b3JfcmVz ZXJ2ZV9pZl9ub3RfYWxsb2NhdGVkKHVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGUsCisJCQkJCSAg ICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICAgICAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qg b2Zmc2V0LAorCQkJCQkgICAgICBib29sICppc19hbGxvY2F0ZWRwKTsKKwordm9pZCBpbnRlbF9h bGxvY2F0b3JfcHJpbnQodWludDY0X3QgYWxsb2NhdG9yX2hhbmRsZSk7CisKKyNkZWZpbmUgSU5U RUxfQUxMT0NBVE9SX05PTkUgICAwCisjZGVmaW5lIElOVEVMX0FMTE9DQVRPUl9SQU5ET00gMQor I2RlZmluZSBJTlRFTF9BTExPQ0FUT1JfU0lNUExFIDIKKworc3RhdGljIGlubGluZSB1aW50NjRf dCBDQU5PTklDQUwodWludDY0X3QgYWRkcmVzcykKK3sKKwlyZXR1cm4gKGludDY0X3QpKGFkZHJl c3MgPDwgMTYpID4+IDE2OworfQorCisjZGVmaW5lIERFQ0FOT05JQ0FMKG9mZnNldCkgKG9mZnNl dCAmICgoMXVsbCA8PCA0OCkgLSAxKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaW50ZWxf YWxsb2NhdG9yX21zZ2NoYW5uZWwuYyBiL2xpYi9pbnRlbF9hbGxvY2F0b3JfbXNnY2hhbm5lbC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wODRhOTc3ZAotLS0gL2Rldi9u dWxsCisrKyBiL2xpYi9pbnRlbF9hbGxvY2F0b3JfbXNnY2hhbm5lbC5jCkBAIC0wLDAgKzEsMTgy IEBACisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1 ZGUgPHN5cy9tc2cuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaW50ZWxfYWxsb2NhdG9yX21zZ2NoYW5uZWwu aCIKKworZXh0ZXJuIF9fdGhyZWFkIHBpZF90IGNoaWxkX3RpZDsKKworLyogLS0tLS0gU1lTVklQ QyBNU0dRVUVVRSAtLS0tLSAqLworCisjZGVmaW5lIEZUT0tfSUdUX0FMTE9DQVRPUl9LRVkgIi90 bXAvaWd0LmFsbG9jYXRvci5rZXkiCisjZGVmaW5lIEZUT0tfSUdUX0FMTE9DQVRPUl9QUk9KSUQg MjAyMAorCisjZGVmaW5lIEFMTE9DQVRPUl9SRVFVRVNUIDEKKworc3RydWN0IG1zZ3F1ZXVlX2Rh dGEgeworCWtleV90IGtleTsKKwlpbnQgcXVldWU7Cit9OworCitzdHJ1Y3QgbXNncXVldWVfYnVm IHsKKyAgICAgICBsb25nIG10eXBlOworICAgICAgIHVuaW9uIHsKKwkgICAgICAgc3RydWN0IGFs bG9jX3JlcSByZXF1ZXN0OworCSAgICAgICBzdHJ1Y3QgYWxsb2NfcmVzcCByZXNwb25zZTsKKyAg ICAgICB9IGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBtc2dxdWV1ZV9pbml0KHN0cnVjdCBtc2df Y2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXNncXVldWVfZGF0YSAqbXNnZGF0YTsKKwlz dHJ1Y3QgbXNxaWRfZHMgcXN0YXQ7CisJa2V5X3Qga2V5OworCWludCBmZCwgcXVldWU7CisKKwlp Z3RfZGVidWcoIkluaXQgbXNncXVldWVcbiIpOworCisJLyogQ3JlYXRlIGZ0b2sga2V5IG9ubHkg aWYgbm90IGV4aXN0cyAqLworCWZkID0gb3BlbihGVE9LX0lHVF9BTExPQ0FUT1JfS0VZLCBPX0NS RUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2MDApOworCWlndF9hc3NlcnQoZmQgPj0gMCB8fCBl cnJubyA9PSBFRVhJU1QpOworCWlmIChmZCA+PSAwKQorCQljbG9zZShmZCk7CisKKwlrZXkgPSBm dG9rKEZUT0tfSUdUX0FMTE9DQVRPUl9LRVksIEZUT0tfSUdUX0FMTE9DQVRPUl9QUk9KSUQpOwor CWlndF9hc3NlcnQoa2V5ICE9IC0xKTsKKwlpZ3RfZGVidWcoIlF1ZXVlIGtleTogJXhcbiIsIChp bnQpIGtleSk7CisKKwlxdWV1ZSA9IG1zZ2dldChrZXksIDApOworCWlmIChxdWV1ZSAhPSAtMSkg eworCQlpZ3RfYXNzZXJ0KG1zZ2N0bChxdWV1ZSwgSVBDX1NUQVQsICZxc3RhdCkgPT0gMCk7CisJ CWlndF9kZWJ1Zygib2xkIG1lc3NhZ2VzOiAlbHVcbiIsIHFzdGF0Lm1zZ19xbnVtKTsKKwkJaWd0 X2Fzc2VydChtc2djdGwocXVldWUsIElQQ19STUlELCBOVUxMKSA9PSAwKTsKKwl9CisKKwlxdWV1 ZSA9IG1zZ2dldChrZXksIElQQ19DUkVBVCk7CisJaWd0X2RlYnVnKCJtc2cgcXVldWU6ICVkXG4i LCBxdWV1ZSk7CisKKwltc2dkYXRhID0gY2FsbG9jKDEsIHNpemVvZigqbXNnZGF0YSkpOworCWln dF9hc3NlcnQobXNnZGF0YSk7CisJbXNnZGF0YS0+a2V5ID0ga2V5OworCW1zZ2RhdGEtPnF1ZXVl ID0gcXVldWU7CisJY2hhbm5lbC0+cHJpdiA9IG1zZ2RhdGE7Cit9CisKK3N0YXRpYyB2b2lkIG1z Z3F1ZXVlX2RlaW5pdChzdHJ1Y3QgbXNnX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IG1z Z3F1ZXVlX2RhdGEgKm1zZ2RhdGEgPSBjaGFubmVsLT5wcml2OworCisJaWd0X2RlYnVnKCJEZWlu aXQgbXNncXVldWVcbiIpOworCW1zZ2N0bChtc2dkYXRhLT5xdWV1ZSwgSVBDX1JNSUQsIE5VTEwp OworCWZyZWUoY2hhbm5lbC0+cHJpdik7Cit9CisKK3N0YXRpYyBpbnQgbXNncXVldWVfc2VuZF9y ZXEoc3RydWN0IG1zZ19jaGFubmVsICpjaGFubmVsLAorCQkJICAgICBzdHJ1Y3QgYWxsb2NfcmVx ICpyZXF1ZXN0KQoreworCXN0cnVjdCBtc2dxdWV1ZV9kYXRhICptc2dkYXRhID0gY2hhbm5lbC0+ cHJpdjsKKwlzdHJ1Y3QgbXNncXVldWVfYnVmIGJ1ZiA9IHswfTsKKwlpbnQgcmV0OworCisJYnVm Lm10eXBlID0gQUxMT0NBVE9SX1JFUVVFU1Q7CisJYnVmLmRhdGEucmVxdWVzdC5yZXF1ZXN0X3R5 cGUgPSAxOworCW1lbWNweSgmYnVmLmRhdGEucmVxdWVzdCwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1 ZXN0KSk7CisKK3JldHJ5OgorCXJldCA9IG1zZ3NuZChtc2dkYXRhLT5xdWV1ZSwgJmJ1Ziwgc2l6 ZW9mKGJ1ZikgLSBzaXplb2YobG9uZyksIDApOworCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gPT0g RUlOVFIpCisJCWdvdG8gcmV0cnk7CisKKwlpZiAocmV0ID09IC0xKQorCQlpZ3Rfd2FybigiRXJy b3I6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBtc2dxdWV1ZV9yZWN2X3JlcShzdHJ1Y3QgbXNnX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkg ICAgIHN0cnVjdCBhbGxvY19yZXEgKnJlcXVlc3QpCit7CisJc3RydWN0IG1zZ3F1ZXVlX2RhdGEg Km1zZ2RhdGEgPSBjaGFubmVsLT5wcml2OworCXN0cnVjdCBtc2dxdWV1ZV9idWYgYnVmID0gezB9 OworCWludCByZXQsIHNpemUgPSBzaXplb2YoYnVmKSAtIHNpemVvZihsb25nKTsKKworcmV0cnk6 CisJcmV0ID0gbXNncmN2KG1zZ2RhdGEtPnF1ZXVlLCAmYnVmLCBzaXplLCBBTExPQ0FUT1JfUkVR VUVTVCwgMCk7CisJaWYgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikKKwkJZ290byByZXRy eTsKKworCWlmIChyZXQgPT0gc2l6ZSkKKwkJbWVtY3B5KHJlcXVlc3QsICZidWYuZGF0YS5yZXF1 ZXN0LCBzaXplb2YoKnJlcXVlc3QpKTsKKwllbHNlIGlmIChyZXQgPT0gLTEpCisJCWlndF93YXJu KCJFcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IG1zZ3F1ZXVlX3NlbmRfcmVzcChzdHJ1Y3QgbXNnX2NoYW5uZWwgKmNoYW5uZWws CisJCQkgICAgICBzdHJ1Y3QgYWxsb2NfcmVzcCAqcmVzcG9uc2UpCit7CisJc3RydWN0IG1zZ3F1 ZXVlX2RhdGEgKm1zZ2RhdGEgPSBjaGFubmVsLT5wcml2OworCXN0cnVjdCBtc2dxdWV1ZV9idWYg YnVmID0gezB9OworCWludCByZXQ7CisKKwlidWYubXR5cGUgPSByZXNwb25zZS0+dGlkOworCW1l bWNweSgmYnVmLmRhdGEucmVzcG9uc2UsIHJlc3BvbnNlLCBzaXplb2YoKnJlc3BvbnNlKSk7CisK K3JldHJ5OgorCXJldCA9IG1zZ3NuZChtc2dkYXRhLT5xdWV1ZSwgJmJ1Ziwgc2l6ZW9mKGJ1Zikg LSBzaXplb2YobG9uZyksIDApOworCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisJ CWdvdG8gcmV0cnk7CisKKwlpZiAocmV0ID09IC0xKQorCQlpZ3Rfd2FybigiRXJyb3I6ICVzXG4i LCBzdHJlcnJvcihlcnJubykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtc2dx dWV1ZV9yZWN2X3Jlc3Aoc3RydWN0IG1zZ19jaGFubmVsICpjaGFubmVsLAorCQkJICAgICAgc3Ry dWN0IGFsbG9jX3Jlc3AgKnJlc3BvbnNlKQoreworCXN0cnVjdCBtc2dxdWV1ZV9kYXRhICptc2dk YXRhID0gY2hhbm5lbC0+cHJpdjsKKwlzdHJ1Y3QgbXNncXVldWVfYnVmIGJ1ZiA9IHswfTsKKwlp bnQgcmV0LCBzaXplID0gc2l6ZW9mKGJ1ZikgLSBzaXplb2YobG9uZyk7CisKK3JldHJ5OgorCXJl dCA9IG1zZ3Jjdihtc2dkYXRhLT5xdWV1ZSwgJmJ1Ziwgc2l6ZW9mKGJ1ZikgLSBzaXplb2YobG9u ZyksCisJCSAgICAgcmVzcG9uc2UtPnRpZCwgMCk7CisJaWYgKHJldCA9PSAtMSAmJiBlcnJubyA9 PSBFSU5UUikKKwkJZ290byByZXRyeTsKKworCWlmIChyZXQgPT0gc2l6ZSkKKwkJbWVtY3B5KHJl c3BvbnNlLCAmYnVmLmRhdGEucmVzcG9uc2UsIHNpemVvZigqcmVzcG9uc2UpKTsKKwllbHNlIGlm IChyZXQgPT0gLTEpCisJCWlndF93YXJuKCJFcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG1zZ19jaGFubmVsIG1zZ3F1ZXVl X2NoYW5uZWwgPSB7CisJLnByaXYgPSBOVUxMLAorCS5pbml0ID0gbXNncXVldWVfaW5pdCwKKwku ZGVpbml0ID0gbXNncXVldWVfZGVpbml0LAorCS5zZW5kX3JlcSA9IG1zZ3F1ZXVlX3NlbmRfcmVx LAorCS5yZWN2X3JlcSA9IG1zZ3F1ZXVlX3JlY3ZfcmVxLAorCS5zZW5kX3Jlc3AgPSBtc2dxdWV1 ZV9zZW5kX3Jlc3AsCisJLnJlY3ZfcmVzcCA9IG1zZ3F1ZXVlX3JlY3ZfcmVzcCwKK307CisKK3N0 cnVjdCBtc2dfY2hhbm5lbCAqaW50ZWxfYWxsb2NhdG9yX2dldF9tc2djaGFubmVsKGVudW0gbXNn X2NoYW5uZWxfdHlwZSB0eXBlKQoreworCXN0cnVjdCBtc2dfY2hhbm5lbCAqY2hhbm5lbCA9IE5V TEw7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIENIQU5ORUxfU1lTVklQQ19NU0dRVUVVRToK KwkJY2hhbm5lbCA9ICZtc2dxdWV1ZV9jaGFubmVsOworCX0KKworCWlndF9hc3NlcnQoY2hhbm5l bCk7CisKKwlyZXR1cm4gY2hhbm5lbDsKK30KZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9hbGxvY2F0 b3JfbXNnY2hhbm5lbC5oIGIvbGliL2ludGVsX2FsbG9jYXRvcl9tc2djaGFubmVsLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmFiNDZkOWVhCi0tLSAvZGV2L251bGwKKysr IGIvbGliL2ludGVsX2FsbG9jYXRvcl9tc2djaGFubmVsLmgKQEAgLTAsMCArMSwxNDAgQEAKKyNp Zm5kZWYgX19JTlRFTF9BTExPQ0FUT1JfTVNHQ0hBTk5FTF9IX18KKyNkZWZpbmUgX19JTlRFTF9B TExPQ0FUT1JfTVNHQ0hBTk5FTF9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitlbnVtIHJlcXR5cGUgeworCVJF UV9TVE9QLAorCVJFUV9PUEVOLAorCVJFUV9DTE9TRSwKKwlSRVFfQUREUkVTU19SQU5HRSwKKwlS RVFfQUxMT0MsCisJUkVRX0ZSRUUsCisJUkVRX0lTX0FMTE9DQVRFRCwKKwlSRVFfUkVTRVJWRSwK KwlSRVFfVU5SRVNFUlZFLAorCVJFUV9SRVNFUlZFX0lGX05PVF9BTExPQ0FURUQsCisJUkVRX0lT X1JFU0VSVkVELAorfTsKKworZW51bSByZXNwdHlwZSB7CisJUkVTUF9PUEVOLAorCVJFU1BfQ0xP U0UsCisJUkVTUF9BRERSRVNTX1JBTkdFLAorCVJFU1BfQUxMT0MsCisJUkVTUF9GUkVFLAorCVJF U1BfSVNfQUxMT0NBVEVELAorCVJFU1BfUkVTRVJWRSwKKwlSRVNQX1VOUkVTRVJWRSwKKwlSRVNQ X0lTX1JFU0VSVkVELAorCVJFU1BfUkVTRVJWRV9JRl9OT1RfQUxMT0NBVEVELAorfTsKKworc3Ry dWN0IGFsbG9jX3JlcSB7CisJZW51bSByZXF0eXBlIHJlcXVlc3RfdHlwZTsKKworCS8qIENvbW1v biAqLworCXBpZF90IHRpZDsKKwl1aW50NjRfdCBhbGxvY2F0b3JfaGFuZGxlOworCisJdW5pb24g eworCQlzdHJ1Y3QgeworCQkJaW50IGZkOworCQkJdWludDMyX3QgY3R4OworCQkJdWludDhfdCBh bGxvY2F0b3JfdHlwZTsKKwkJfSBvcGVuOworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBoYW5k bGU7CisJCQl1aW50NjRfdCBzaXplOworCQkJdWludDY0X3QgYWxpZ25tZW50OworCQl9IGFsbG9j OworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBoYW5kbGU7CisJCX0gZnJlZTsKKworCQlzdHJ1 Y3QgeworCQkJdWludDMyX3QgaGFuZGxlOworCQkJdWludDY0X3Qgc2l6ZTsKKwkJCXVpbnQ2NF90 IG9mZnNldDsKKwkJfSBpc19hbGxvY2F0ZWQ7CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGhh bmRsZTsKKwkJCXVpbnQ2NF90IHN0YXJ0OworCQkJdWludDY0X3QgZW5kOworCQl9IHJlc2VydmUs IHVucmVzZXJ2ZTsKKworCQlzdHJ1Y3QgeworCQkJdWludDY0X3Qgc3RhcnQ7CisJCQl1aW50NjRf dCBlbmQ7CisJCX0gaXNfcmVzZXJ2ZWQ7CisKKwl9OworfTsKKworc3RydWN0IGFsbG9jX3Jlc3Ag eworCWVudW0gcmVzcHR5cGUgcmVzcG9uc2VfdHlwZTsKKwlwaWRfdCB0aWQ7CisKKwl1bmlvbiB7 CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdCBhbGxvY2F0b3JfaGFuZGxlOworCQl9IG9wZW47CisK KwkJc3RydWN0IHsKKwkJCWJvb2wgaXNfZW1wdHk7CisJCX0gY2xvc2U7CisKKwkJc3RydWN0IHsK KwkJCXVpbnQ2NF90IHN0YXJ0OworCQkJdWludDY0X3QgZW5kOworCQl9IGFkZHJlc3NfcmFuZ2U7 CisKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90IG9mZnNldDsKKwkJfSBhbGxvYzsKKworCQlzdHJ1 Y3QgeworCQkJYm9vbCBmcmVlZDsKKwkJfSBmcmVlOworCisJCXN0cnVjdCB7CisJCQlib29sIGFs bG9jYXRlZDsKKwkJfSBpc19hbGxvY2F0ZWQ7CisKKwkJc3RydWN0IHsKKwkJCWJvb2wgcmVzZXJ2 ZWQ7CisJCX0gcmVzZXJ2ZSwgaXNfcmVzZXJ2ZWQ7CisKKwkJc3RydWN0IHsKKwkJCWJvb2wgdW5y ZXNlcnZlZDsKKwkJfSB1bnJlc2VydmU7CisKKwkJc3RydWN0IHsKKwkJCWJvb2wgYWxsb2NhdGVk OworCQkJYm9vbCByZXNlcnZlZDsKKwkJfSByZXNlcnZlX2lmX25vdF9hbGxvY2F0ZWQ7CisJfTsK K307CisKK3N0cnVjdCBtc2dfY2hhbm5lbCB7CisJdm9pZCAqcHJpdjsKKwl2b2lkICgqaW5pdCko c3RydWN0IG1zZ19jaGFubmVsICpjaGFubmVsKTsKKwl2b2lkICgqZGVpbml0KShzdHJ1Y3QgbXNn X2NoYW5uZWwgKmNoYW5uZWwpOworCWludCAoKnNlbmRfcmVxKShzdHJ1Y3QgbXNnX2NoYW5uZWwg KmNoYW5uZWwsIHN0cnVjdCBhbGxvY19yZXEgKnJlcXVlc3QpOworCWludCAoKnJlY3ZfcmVxKShz dHJ1Y3QgbXNnX2NoYW5uZWwgKmNoYW5uZWwsIHN0cnVjdCBhbGxvY19yZXEgKnJlcXVlc3QpOwor CWludCAoKnNlbmRfcmVzcCkoc3RydWN0IG1zZ19jaGFubmVsICpjaGFubmVsLCBzdHJ1Y3QgYWxs b2NfcmVzcCAqcmVzcG9uc2UpOworCWludCAoKnJlY3ZfcmVzcCkoc3RydWN0IG1zZ19jaGFubmVs ICpjaGFubmVsLCBzdHJ1Y3QgYWxsb2NfcmVzcCAqcmVzcG9uc2UpOworfTsKKworZW51bSBtc2df Y2hhbm5lbF90eXBlIHsKKwlDSEFOTkVMX1NZU1ZJUENfTVNHUVVFVUUKK307CisKK3N0cnVjdCBt c2dfY2hhbm5lbCAqaW50ZWxfYWxsb2NhdG9yX2dldF9tc2djaGFubmVsKGVudW0gbXNnX2NoYW5u ZWxfdHlwZSB0eXBlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYWxsb2NhdG9y X3NpbXBsZS5jIGIvbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwppbmRleCAxZjUyZGIzZi4u MWQwZTExN2QgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9hbGxvY2F0b3Jfc2ltcGxlLmMKKysrIGIv bGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwpAQCAtODIsOCArODIsNiBAQCBzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yX3JlY29yZCB7CiAjZGVmaW5lIHNpbXBsZV92bWFfZm9yZWFjaF9ob2xlX3Nh ZmVfcmV2KF9ob2xlLCBfaGVhcCwgX3RtcCkgXAogCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmVfcmV2ZXJzZShfaG9sZSwgX3RtcCwgICYoX2hlYXApLT5ob2xlcywgbGluaykKIAotI2RlZmlu ZSBERUNBTk9OSUNBTChvZmZzZXQpIChvZmZzZXQgJiAoKDF1bGwgPDwgNDgpIC0gMSkpCi0KIHN0 YXRpYyB1aW50NjRfdCBnZXRfYmlhcyhpbnQgZmQpCiB7CiAJKHZvaWQpIGZkOwpkaWZmIC0tZ2l0 IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDQ4NGQzYzdiLi43YTMy MmE0NCAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApA QCAtMzIsNiArMzIsMTAgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF92Z2VtLmMnLAogCSdpZ3Rf eDg2LmMnLAogCSdpbnN0ZG9uZS5jJywKKwknaW50ZWxfYWxsb2NhdG9yLmMnLAorCSdpbnRlbF9h bGxvY2F0b3JfbXNnY2hhbm5lbC5jJywKKwknaW50ZWxfYWxsb2NhdG9yX3JhbmRvbS5jJywKKwkn aW50ZWxfYWxsb2NhdG9yX3NpbXBsZS5jJywKIAknaW50ZWxfYmF0Y2hidWZmZXIuYycsCiAJJ2lu dGVsX2J1Zm9wcy5jJywKIAknaW50ZWxfY2hpcHNldC5jJywKLS0gCjIuMjYuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxp c3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==