From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Wiklander Subject: [PATCH v15 3/5] tee: add OP-TEE driver Date: Sat, 28 Jan 2017 13:19:42 +0100 Message-ID: <1485605984-30064-4-git-send-email-jens.wiklander@linaro.org> References: <1485605984-30064-1-git-send-email-jens.wiklander@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1485605984-30064-1-git-send-email-jens.wiklander@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Greg Kroah-Hartman , Arnd Bergmann , Olof Johansson , Andrew Morton Cc: Mark Rutland , Nishanth Menon , Benjamin GAIGNARD , Will Deacon , Patrice CHOTARD , Christophe PRIOUZEAU , Franck ALBESA , javier@javigon.com, Loic PALLARDY , Michal Simek , Wei Xu , Jason Gunthorpe , devicetree@vger.kernel.org, scott.branden@broadcom.com, jean-michel.delorme@st.com, broonie@kernel.org, Al Viro , linux-arm-kernel@lists.infradead.org, Etienne CARRIERE , emmanuel.michel@st.com, Eric FINCO , linux-kernel@vger.kernel.org, "Andrew F . Davis" , Rob Herring , Jens Wiklander List-Id: devicetree@vger.kernel.org QWRkcyBhIE9QLVRFRSBkcml2ZXIgd2hpY2ggYWxzbyBjYW4gYmUgY29tcGlsZWQgYXMgYSBsb2Fk YWJsZSBtb2R1bGUuCgoqIFRhcmdldHMgQVJNIGFuZCBBUk02NAoqIFN1cHBvcnRzIHVzaW5nIHJl c2VydmVkIG1lbW9yeSBmcm9tIE9QLVRFRSBhcyBzaGFyZWQgbWVtb3J5CiogUHJvYmVzIE9QLVRF RSB2ZXJzaW9uIHVzaW5nIFNNQ3MKKiBBY2NlcHRzIHJlcXVlc3RzIG9uIHByaXZpbGVnZWQgYW5k IHVucHJpdmlsZWdlZCBkZXZpY2UKKiBVc2VzIE9QVEVFIG1lc3NhZ2UgcHJvdG9jb2wgdmVyc2lv biAyIHRvIGNvbW11bmljYXRlIHdpdGggc2VjdXJlIHdvcmxkCgpBY2tlZC1ieTogQW5kcmVhcyBE YW5uZW5iZXJnIDxkYW5uZW5iZXJnQHRpLmNvbT4KVGVzdGVkLWJ5OiBKZXJvbWUgRm9yaXNzaWVy IDxqZXJvbWUuZm9yaXNzaWVyQGxpbmFyby5vcmc+IChIaUtleSkKVGVzdGVkLWJ5OiBWb2xvZHlt eXIgQmFiY2h1ayA8dmxhZC5iYWJjaHVrQGdtYWlsLmNvbT4gKFJDQVIgSDMpClRlc3RlZC1ieTog U2NvdHQgQnJhbmRlbiA8c2NvdHQuYnJhbmRlbkBicm9hZGNvbS5jb20+ClJldmlld2VkLWJ5OiBK YXZpZXIgR29uesOhbGV6IDxqYXZpZXJAamF2aWdvbi5jb20+ClNpZ25lZC1vZmYtYnk6IEplbnMg V2lrbGFuZGVyIDxqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgotLS0KIE1BSU5UQUlORVJTICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL3RlZS9LY29uZmlnICAgICAgICAg ICAgICAgfCAgMTAgKwogZHJpdmVycy90ZWUvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvdGVlL29wdGVlL0tjb25maWcgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL3RlZS9v cHRlZS9NYWtlZmlsZSAgICAgICAgfCAgIDUgKwogZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jICAg ICAgICAgIHwgNDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvdGVlL29w dGVlL2NvcmUuYyAgICAgICAgICB8IDYwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfbXNnLmggICAgIHwgNDE4ICsrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRlLmggfCAx ODMgKysrKysrKysrKysrCiBkcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9zbWMuaCAgICAgfCA0NTAg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy90ZWUvb3B0ZWUvcnBjLmMgICAg ICAgICAgIHwgMzk2ICsrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvdGVlL29wdGVl L3N1cHAuYyAgICAgICAgICB8IDI3MyArKysrKysrKysrKysrKysrKwogMTIgZmlsZXMgY2hhbmdl ZCwgMjc5NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0 ZWUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL29wdGVlL01ha2VmaWxl CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy90ZWUvb3B0ZWUvb3B0ZWVfbXNnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Rl ZS9vcHRlZS9vcHRlZV9wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3RlZS9v cHRlZS9vcHRlZV9zbWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL29wdGVlL3Jw Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvc3VwcC5jCgpkaWZmIC0t Z2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAyOGVkOTUxNjZlNDAuLmJjOWMy MDg2ZjE5YiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTky MjAsNiArOTIyMCwxMSBAQCBGOglhcmNoLyovb3Byb2ZpbGUvCiBGOglkcml2ZXJzL29wcm9maWxl LwogRjoJaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCiAKK09QLVRFRSBEUklWRVIKK006CUplbnMg V2lrbGFuZGVyIDxqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgorUzoJTWFpbnRhaW5lZAorRjoJ ZHJpdmVycy90ZWUvb3B0ZWUvCisKIE9SQUNMRSBDTFVTVEVSIEZJTEVTWVNURU0gMiAoT0NGUzIp CiBNOglNYXJrIEZhc2hlaCA8bWZhc2hlaEB2ZXJzaXR5LmNvbT4KIE06CUpvZWwgQmVja2VyIDxq bGJlY0BldmlscGxhbi5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9LY29uZmlnIGIvZHJp dmVycy90ZWUvS2NvbmZpZwppbmRleCA1MGMyNDRlYWQ0NmQuLjIzMzBhNGViNGU4YiAxMDA2NDQK LS0tIGEvZHJpdmVycy90ZWUvS2NvbmZpZworKysgYi9kcml2ZXJzL3RlZS9LY29uZmlnCkBAIC02 LDMgKzYsMTMgQEAgY29uZmlnIFRFRQogCWhlbHAKIAkgIFRoaXMgaW1wbGVtZW50cyBhIGdlbmVy aWMgaW50ZXJmYWNlIHRvd2FyZHMgYSBUcnVzdGVkIEV4ZWN1dGlvbgogCSAgRW52aXJvbm1lbnQg KFRFRSkuCisKK2lmIFRFRQorCittZW51ICJURUUgZHJpdmVycyIKKworc291cmNlICJkcml2ZXJz L3RlZS9vcHRlZS9LY29uZmlnIgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3RlZS9NYWtlZmlsZSBiL2RyaXZlcnMvdGVlL01ha2VmaWxlCmluZGV4IGVjNjQwNDdhODZl Mi4uN2E0ZTRhMWFjMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlZS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL3RlZS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAgb2JqLSQoQ09ORklHX1RFRSkgKz0g dGVlLm8KIHRlZS1vYmpzICs9IHRlZV9jb3JlLm8KIHRlZS1vYmpzICs9IHRlZV9zaG0ubwogdGVl LW9ianMgKz0gdGVlX3NobV9wb29sLm8KK29iai0kKENPTkZJR19PUFRFRSkgKz0gb3B0ZWUvCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnIGIvZHJpdmVycy90ZWUvb3B0ZWUv S2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAxMjZkZTg5 ODAzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL0tjb25maWcKQEAgLTAs MCArMSw3IEBACisjIE9QLVRFRSBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBDb25maWd1 cmF0aW9uCitjb25maWcgT1BURUUKKwl0cmlzdGF0ZSAiT1AtVEVFIgorCWRlcGVuZHMgb24gSEFW RV9BUk1fU01DQ0MKKwloZWxwCisJICBUaGlzIGltcGxlbWVudHMgdGhlIE9QLVRFRSBUcnVzdGVk IEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKQorCSAgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy90ZWUvb3B0ZWUvTWFrZWZpbGUgYi9kcml2ZXJzL3RlZS9vcHRlZS9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkyZmU1Nzg5YmNjZQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAor b2JqLSQoQ09ORklHX09QVEVFKSArPSBvcHRlZS5vCitvcHRlZS1vYmpzICs9IGNvcmUubworb3B0 ZWUtb2JqcyArPSBjYWxsLm8KK29wdGVlLW9ianMgKz0gcnBjLm8KK29wdGVlLW9ianMgKz0gc3Vw cC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9jYWxsLmMgYi9kcml2ZXJzL3RlZS9v cHRlZS9jYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mN2I3 YjQwNGM5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9vcHRlZS9jYWxsLmMKQEAg LTAsMCArMSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVk CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRp c3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KKyNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxs aW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90 ZWVfZHJ2Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+CisjaW5jbHVkZSAib3B0ZWVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIm9wdGVlX3NtYy5o IgorCitzdHJ1Y3Qgb3B0ZWVfY2FsbF93YWl0ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9u b2RlOworCXN0cnVjdCBjb21wbGV0aW9uIGM7Cit9OworCitzdGF0aWMgdm9pZCBvcHRlZV9jcV93 YWl0X2luaXQoc3RydWN0IG9wdGVlX2NhbGxfcXVldWUgKmNxLAorCQkJICAgICAgIHN0cnVjdCBv cHRlZV9jYWxsX3dhaXRlciAqdykKK3sKKwkvKgorCSAqIFdlJ3JlIHByZXBhcmluZyB0byBtYWtl IGEgY2FsbCB0byBzZWN1cmUgd29ybGQuIEluIGNhc2Ugd2UgY2FuJ3QKKwkgKiBhbGxvY2F0ZSBh IHRocmVhZCBpbiBzZWN1cmUgd29ybGQgd2UnbGwgZW5kIHVwIHdhaXRpbmcgaW4KKwkgKiBvcHRl ZV9jcV93YWl0X2Zvcl9jb21wbGV0aW9uKCkuCisJICoKKwkgKiBOb3JtYWxseSBpZiB0aGVyZSdz IG5vIGNvbnRlbnRpb24gaW4gc2VjdXJlIHdvcmxkIHRoZSBjYWxsIHdpbGwKKwkgKiBjb21wbGV0 ZSBhbmQgd2UgY2FuIGNsZWFudXAgZGlyZWN0bHkgd2l0aCBvcHRlZV9jcV93YWl0X2ZpbmFsKCku CisJICovCisJbXV0ZXhfbG9jaygmY3EtPm11dGV4KTsKKworCS8qCisJICogV2UgYWRkIG91cnNl bHZlcyB0byB0aGUgcXVldWUsIGJ1dCB3ZSBkb24ndCB3YWl0LiBUaGlzCisJICogZ3VhcmFudGVl cyB0aGF0IHdlIGRvbid0IGxvc2UgYSBjb21wbGV0aW9uIGlmIHNlY3VyZSB3b3JsZAorCSAqIHJl dHVybnMgYnVzeSBhbmQgYW5vdGhlciB0aHJlYWQganVzdCBleGl0ZWQgYW5kIHRyeSB0byBjb21w bGV0ZQorCSAqIHNvbWVvbmUuCisJICovCisJaW5pdF9jb21wbGV0aW9uKCZ3LT5jKTsKKwlsaXN0 X2FkZF90YWlsKCZ3LT5saXN0X25vZGUsICZjcS0+d2FpdGVycyk7CisKKwltdXRleF91bmxvY2so JmNxLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGVlX2NxX3dhaXRfZm9yX2NvbXBsZXRp b24oc3RydWN0IG9wdGVlX2NhbGxfcXVldWUgKmNxLAorCQkJCQkgc3RydWN0IG9wdGVlX2NhbGxf d2FpdGVyICp3KQoreworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnctPmMpOworCisJbXV0ZXhfbG9j aygmY3EtPm11dGV4KTsKKworCS8qIE1vdmUgdG8gZW5kIG9mIGxpc3QgdG8gZ2V0IG91dCBvZiB0 aGUgd2F5IGZvciBvdGhlciB3YWl0ZXJzICovCisJbGlzdF9kZWwoJnctPmxpc3Rfbm9kZSk7CisJ cmVpbml0X2NvbXBsZXRpb24oJnctPmMpOworCWxpc3RfYWRkX3RhaWwoJnctPmxpc3Rfbm9kZSwg JmNxLT53YWl0ZXJzKTsKKworCW11dGV4X3VubG9jaygmY3EtPm11dGV4KTsKK30KKworc3RhdGlj IHZvaWQgb3B0ZWVfY3FfY29tcGxldGVfb25lKHN0cnVjdCBvcHRlZV9jYWxsX3F1ZXVlICpjcSkK K3sKKwlzdHJ1Y3Qgb3B0ZWVfY2FsbF93YWl0ZXIgKnc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHcsICZjcS0+d2FpdGVycywgbGlzdF9ub2RlKSB7CisJCWlmICghY29tcGxldGlvbl9kb25lKCZ3 LT5jKSkgeworCQkJY29tcGxldGUoJnctPmMpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0 YXRpYyB2b2lkIG9wdGVlX2NxX3dhaXRfZmluYWwoc3RydWN0IG9wdGVlX2NhbGxfcXVldWUgKmNx LAorCQkJCXN0cnVjdCBvcHRlZV9jYWxsX3dhaXRlciAqdykKK3sKKwkvKgorCSAqIFdlJ3JlIGRv bmUgd2l0aCB0aGUgY2FsbCB0byBzZWN1cmUgd29ybGQuIFRoZSB0aHJlYWQgaW4gc2VjdXJlCisJ ICogd29ybGQgdGhhdCB3YXMgdXNlZCBmb3IgdGhpcyBjYWxsIGlzIG5vdyBhdmFpbGFibGUgZm9y IHNvbWUKKwkgKiBvdGhlciB0YXNrIHRvIHVzZS4KKwkgKi8KKwltdXRleF9sb2NrKCZjcS0+bXV0 ZXgpOworCisJLyogR2V0IG91dCBvZiB0aGUgbGlzdCAqLworCWxpc3RfZGVsKCZ3LT5saXN0X25v ZGUpOworCisJLyogV2FrZSB1cCBvbmUgZXZlbnR1YWwgd2FpdGluZyB0YXNrICovCisJb3B0ZWVf Y3FfY29tcGxldGVfb25lKGNxKTsKKworCS8qCisJICogSWYgd2UncmUgY29tcGxldGVkIHdlJ3Zl IGdvdCBhIGNvbXBsZXRpb24gZnJvbSBhbm90aGVyIHRhc2sgdGhhdAorCSAqIHdhcyBqdXN0IGRv bmUgd2l0aCBpdHMgY2FsbCB0byBzZWN1cmUgd29ybGQuIFNpbmNlIHlldCBhbm90aGVyCisJICog dGhyZWFkIG5vdyBpcyBhdmFpbGFibGUgaW4gc2VjdXJlIHdvcmxkIHdha2UgdXAgYW5vdGhlciBl dmVudHVhbAorCSAqIHdhaXRpbmcgdGFzay4KKwkgKi8KKwlpZiAoY29tcGxldGlvbl9kb25lKCZ3 LT5jKSkKKwkJb3B0ZWVfY3FfY29tcGxldGVfb25lKGNxKTsKKworCW11dGV4X3VubG9jaygmY3Et Pm11dGV4KTsKK30KKworLyogUmVxdWlyZXMgdGhlIGZpbHBzdGF0ZSBtdXRleCB0byBiZSBoZWxk ICovCitzdGF0aWMgc3RydWN0IG9wdGVlX3Nlc3Npb24gKmZpbmRfc2Vzc2lvbihzdHJ1Y3Qgb3B0 ZWVfY29udGV4dF9kYXRhICpjdHhkYXRhLAorCQkJCQkgIHUzMiBzZXNzaW9uX2lkKQoreworCXN0 cnVjdCBvcHRlZV9zZXNzaW9uICpzZXNzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXNzLCAm Y3R4ZGF0YS0+c2Vzc19saXN0LCBsaXN0X25vZGUpCisJCWlmIChzZXNzLT5zZXNzaW9uX2lkID09 IHNlc3Npb25faWQpCisJCQlyZXR1cm4gc2VzczsKKworCXJldHVybiBOVUxMOworfQorCisvKioK KyAqIG9wdGVlX2RvX2NhbGxfd2l0aF9hcmcoKSAtIERvIGFuIFNNQyB0byBPUC1URUUgaW4gc2Vj dXJlIHdvcmxkCisgKiBAY3R4OgljYWxsaW5nIGNvbnRleHQKKyAqIEBwYXJnOglwaHlzaWNhbCBh ZGRyZXNzIG9mIG1lc3NhZ2UgdG8gcGFzcyB0byBzZWN1cmUgd29ybGQKKyAqCisgKiBEb2VzIGFu ZCBTTUMgdG8gT1AtVEVFIGluIHNlY3VyZSB3b3JsZCBhbmQgaGFuZGxlcyBldmVudHVhbCByZXN1 bHRpbmcKKyAqIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbHMgKFJQQykgZnJvbSBPUC1URUUuCisgKgor ICogUmV0dXJucyByZXR1cm4gY29kZSBmcm9tIHNlY3VyZSB3b3JsZCwgMCBpcyBPSworICovCit1 MzIgb3B0ZWVfZG9fY2FsbF93aXRoX2FyZyhzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgcGh5c19h ZGRyX3QgcGFyZykKK3sKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dldF9kcnZkYXRhKGN0 eC0+dGVlZGV2KTsKKwlzdHJ1Y3Qgb3B0ZWVfY2FsbF93YWl0ZXIgdzsKKwlzdHJ1Y3Qgb3B0ZWVf cnBjX3BhcmFtIHBhcmFtID0geyB9OworCXUzMiByZXQ7CisKKwlwYXJhbS5hMCA9IE9QVEVFX1NN Q19DQUxMX1dJVEhfQVJHOworCXJlZ19wYWlyX2Zyb21fNjQoJnBhcmFtLmExLCAmcGFyYW0uYTIs IHBhcmcpOworCS8qIEluaXRpYWxpemUgd2FpdGVyICovCisJb3B0ZWVfY3Ffd2FpdF9pbml0KCZv cHRlZS0+Y2FsbF9xdWV1ZSwgJncpOworCXdoaWxlICh0cnVlKSB7CisJCXN0cnVjdCBhcm1fc21j Y2NfcmVzIHJlczsKKworCQlvcHRlZS0+aW52b2tlX2ZuKHBhcmFtLmEwLCBwYXJhbS5hMSwgcGFy YW0uYTIsIHBhcmFtLmEzLAorCQkJCSBwYXJhbS5hNCwgcGFyYW0uYTUsIHBhcmFtLmE2LCBwYXJh bS5hNywKKwkJCQkgJnJlcyk7CisKKwkJaWYgKHJlcy5hMCA9PSBPUFRFRV9TTUNfUkVUVVJOX0VU SFJFQURfTElNSVQpIHsKKwkJCS8qCisJCQkgKiBPdXQgb2YgdGhyZWFkcyBpbiBzZWN1cmUgd29y bGQsIHdhaXQgZm9yIGEgdGhyZWFkCisJCQkgKiBiZWNvbWUgYXZhaWxhYmxlLgorCQkJICovCisJ CQlvcHRlZV9jcV93YWl0X2Zvcl9jb21wbGV0aW9uKCZvcHRlZS0+Y2FsbF9xdWV1ZSwgJncpOwor CQl9IGVsc2UgaWYgKE9QVEVFX1NNQ19SRVRVUk5fSVNfUlBDKHJlcy5hMCkpIHsKKwkJCXBhcmFt LmEwID0gcmVzLmEwOworCQkJcGFyYW0uYTEgPSByZXMuYTE7CisJCQlwYXJhbS5hMiA9IHJlcy5h MjsKKwkJCXBhcmFtLmEzID0gcmVzLmEzOworCQkJb3B0ZWVfaGFuZGxlX3JwYyhjdHgsICZwYXJh bSk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSByZXMuYTA7CisJCQlicmVhazsKKwkJfQorCX0KKwor CS8qCisJICogV2UncmUgZG9uZSB3aXRoIG91ciB0aHJlYWQgaW4gc2VjdXJlIHdvcmxkLCBpZiB0 aGVyZSdzIGFueQorCSAqIHRocmVhZCB3YWl0ZXJzIHdha2UgdXAgb25lLgorCSAqLworCW9wdGVl X2NxX3dhaXRfZmluYWwoJm9wdGVlLT5jYWxsX3F1ZXVlLCAmdyk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgc3RydWN0IHRlZV9zaG0gKmdldF9tc2dfYXJnKHN0cnVjdCB0ZWVfY29udGV4 dCAqY3R4LCBzaXplX3QgbnVtX3BhcmFtcywKKwkJCQkgICBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAq Km1zZ19hcmcsCisJCQkJICAgcGh5c19hZGRyX3QgKm1zZ19wYXJnKQoreworCWludCByYzsKKwlz dHJ1Y3QgdGVlX3NobSAqc2htOworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICptYTsKKworCXNobSA9 IHRlZV9zaG1fYWxsb2MoY3R4LCBPUFRFRV9NU0dfR0VUX0FSR19TSVpFKG51bV9wYXJhbXMpLAor CQkJICAgIFRFRV9TSE1fTUFQUEVEKTsKKwlpZiAoSVNfRVJSKHNobSkpCisJCXJldHVybiBzaG07 CisKKwltYSA9IHRlZV9zaG1fZ2V0X3ZhKHNobSwgMCk7CisJaWYgKElTX0VSUihtYSkpIHsKKwkJ cmMgPSBQVFJfRVJSKG1hKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSB0ZWVfc2htX2dldF9w YShzaG0sIDAsIG1zZ19wYXJnKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KG1h LCAwLCBPUFRFRV9NU0dfR0VUX0FSR19TSVpFKG51bV9wYXJhbXMpKTsKKwltYS0+bnVtX3BhcmFt cyA9IG51bV9wYXJhbXM7CisJKm1zZ19hcmcgPSBtYTsKK291dDoKKwlpZiAocmMpIHsKKwkJdGVl X3NobV9mcmVlKHNobSk7CisJCXJldHVybiBFUlJfUFRSKHJjKTsKKwl9CisKKwlyZXR1cm4gc2ht OworfQorCitpbnQgb3B0ZWVfb3Blbl9zZXNzaW9uKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LAor CQkgICAgICAgc3RydWN0IHRlZV9pb2N0bF9vcGVuX3Nlc3Npb25fYXJnICphcmcsCisJCSAgICAg ICBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3Qgb3B0ZWVfY29udGV4dF9kYXRh ICpjdHhkYXRhID0gY3R4LT5kYXRhOworCWludCByYzsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOwor CXN0cnVjdCBvcHRlZV9tc2dfYXJnICptc2dfYXJnOworCXBoeXNfYWRkcl90IG1zZ19wYXJnOwor CXN0cnVjdCBvcHRlZV9zZXNzaW9uICpzZXNzID0gTlVMTDsKKworCS8qICsyIGZvciB0aGUgbWV0 YSBwYXJhbWV0ZXJzIGFkZGVkIGJlbG93ICovCisJc2htID0gZ2V0X21zZ19hcmcoY3R4LCBhcmct Pm51bV9wYXJhbXMgKyAyLCAmbXNnX2FyZywgJm1zZ19wYXJnKTsKKwlpZiAoSVNfRVJSKHNobSkp CisJCXJldHVybiBQVFJfRVJSKHNobSk7CisKKwltc2dfYXJnLT5jbWQgPSBPUFRFRV9NU0dfQ01E X09QRU5fU0VTU0lPTjsKKwltc2dfYXJnLT5jYW5jZWxfaWQgPSBhcmctPmNhbmNlbF9pZDsKKwor CS8qCisJICogSW5pdGlhbGl6ZSBhbmQgYWRkIHRoZSBtZXRhIHBhcmFtZXRlcnMgbmVlZGVkIHdo ZW4gb3BlbmluZyBhCisJICogc2Vzc2lvbi4KKwkgKi8KKwltc2dfYXJnLT5wYXJhbXNbMF0uYXR0 ciA9IE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQgfAorCQkJCSAgT1BURUVfTVNHX0FU VFJfTUVUQTsKKwltc2dfYXJnLT5wYXJhbXNbMV0uYXR0ciA9IE9QVEVFX01TR19BVFRSX1RZUEVf VkFMVUVfSU5QVVQgfAorCQkJCSAgT1BURUVfTVNHX0FUVFJfTUVUQTsKKwltZW1jcHkoJm1zZ19h cmctPnBhcmFtc1swXS51LnZhbHVlLCBhcmctPnV1aWQsIHNpemVvZihhcmctPnV1aWQpKTsKKwlt ZW1jcHkoJm1zZ19hcmctPnBhcmFtc1sxXS51LnZhbHVlLCBhcmctPnV1aWQsIHNpemVvZihhcmct PmNsbnRfdXVpZCkpOworCW1zZ19hcmctPnBhcmFtc1sxXS51LnZhbHVlLmMgPSBhcmctPmNsbnRf bG9naW47CisKKwlyYyA9IG9wdGVlX3RvX21zZ19wYXJhbShtc2dfYXJnLT5wYXJhbXMgKyAyLCBh cmctPm51bV9wYXJhbXMsIHBhcmFtKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJc2VzcyA9 IGt6YWxsb2Moc2l6ZW9mKCpzZXNzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXNzKSB7CisJCXJj ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9wdGVlX2RvX2NhbGxfd2l0aF9h cmcoY3R4LCBtc2dfcGFyZykpIHsKKwkJbXNnX2FyZy0+cmV0ID0gVEVFQ19FUlJPUl9DT01NVU5J Q0FUSU9OOworCQltc2dfYXJnLT5yZXRfb3JpZ2luID0gVEVFQ19PUklHSU5fQ09NTVM7CisJfQor CisJaWYgKG1zZ19hcmctPnJldCA9PSBURUVDX1NVQ0NFU1MpIHsKKwkJLyogQSBuZXcgc2Vzc2lv biBoYXMgYmVlbiBjcmVhdGVkLCBhZGQgaXQgdG8gdGhlIGxpc3QuICovCisJCXNlc3MtPnNlc3Np b25faWQgPSBtc2dfYXJnLT5zZXNzaW9uOworCQltdXRleF9sb2NrKCZjdHhkYXRhLT5tdXRleCk7 CisJCWxpc3RfYWRkKCZzZXNzLT5saXN0X25vZGUsICZjdHhkYXRhLT5zZXNzX2xpc3QpOworCQlt dXRleF91bmxvY2soJmN0eGRhdGEtPm11dGV4KTsKKwl9IGVsc2UgeworCQlrZnJlZShzZXNzKTsK Kwl9CisKKwlpZiAob3B0ZWVfZnJvbV9tc2dfcGFyYW0ocGFyYW0sIGFyZy0+bnVtX3BhcmFtcywg bXNnX2FyZy0+cGFyYW1zICsgMikpIHsKKwkJYXJnLT5yZXQgPSBURUVDX0VSUk9SX0NPTU1VTklD QVRJT047CisJCWFyZy0+cmV0X29yaWdpbiA9IFRFRUNfT1JJR0lOX0NPTU1TOworCQkvKiBDbG9z ZSBzZXNzaW9uIGFnYWluIHRvIGF2b2lkIGxlYWthZ2UgKi8KKwkJb3B0ZWVfY2xvc2Vfc2Vzc2lv bihjdHgsIG1zZ19hcmctPnNlc3Npb24pOworCX0gZWxzZSB7CisJCWFyZy0+c2Vzc2lvbiA9IG1z Z19hcmctPnNlc3Npb247CisJCWFyZy0+cmV0ID0gbXNnX2FyZy0+cmV0OworCQlhcmctPnJldF9v cmlnaW4gPSBtc2dfYXJnLT5yZXRfb3JpZ2luOworCX0KK291dDoKKwl0ZWVfc2htX2ZyZWUoc2ht KTsKKworCXJldHVybiByYzsKK30KKworaW50IG9wdGVlX2Nsb3NlX3Nlc3Npb24oc3RydWN0IHRl ZV9jb250ZXh0ICpjdHgsIHUzMiBzZXNzaW9uKQoreworCXN0cnVjdCBvcHRlZV9jb250ZXh0X2Rh dGEgKmN0eGRhdGEgPSBjdHgtPmRhdGE7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwlzdHJ1Y3Qg b3B0ZWVfbXNnX2FyZyAqbXNnX2FyZzsKKwlwaHlzX2FkZHJfdCBtc2dfcGFyZzsKKwlzdHJ1Y3Qg b3B0ZWVfc2Vzc2lvbiAqc2VzczsKKworCS8qIENoZWNrIHRoYXQgdGhlIHNlc3Npb24gaXMgdmFs aWQgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCisJbXV0ZXhfbG9jaygmY3R4ZGF0YS0+ bXV0ZXgpOworCXNlc3MgPSBmaW5kX3Nlc3Npb24oY3R4ZGF0YSwgc2Vzc2lvbik7CisJaWYgKHNl c3MpCisJCWxpc3RfZGVsKCZzZXNzLT5saXN0X25vZGUpOworCW11dGV4X3VubG9jaygmY3R4ZGF0 YS0+bXV0ZXgpOworCWlmICghc2VzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoc2Vzcyk7 CisKKwlzaG0gPSBnZXRfbXNnX2FyZyhjdHgsIDAsICZtc2dfYXJnLCAmbXNnX3BhcmcpOworCWlm IChJU19FUlIoc2htKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2htKTsKKworCW1zZ19hcmctPmNtZCA9 IE9QVEVFX01TR19DTURfQ0xPU0VfU0VTU0lPTjsKKwltc2dfYXJnLT5zZXNzaW9uID0gc2Vzc2lv bjsKKwlvcHRlZV9kb19jYWxsX3dpdGhfYXJnKGN0eCwgbXNnX3BhcmcpOworCisJdGVlX3NobV9m cmVlKHNobSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvcHRlZV9pbnZva2VfZnVuYyhzdHJ1Y3Qg dGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnICphcmcsCisJCSAg ICAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCBvcHRlZV9jb250ZXh0X2Rh dGEgKmN0eGRhdGEgPSBjdHgtPmRhdGE7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwlzdHJ1Y3Qg b3B0ZWVfbXNnX2FyZyAqbXNnX2FyZzsKKwlwaHlzX2FkZHJfdCBtc2dfcGFyZzsKKwlzdHJ1Y3Qg b3B0ZWVfc2Vzc2lvbiAqc2VzczsKKwlpbnQgcmM7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBzZXNz aW9uIGlzIHZhbGlkICovCisJbXV0ZXhfbG9jaygmY3R4ZGF0YS0+bXV0ZXgpOworCXNlc3MgPSBm aW5kX3Nlc3Npb24oY3R4ZGF0YSwgYXJnLT5zZXNzaW9uKTsKKwltdXRleF91bmxvY2soJmN0eGRh dGEtPm11dGV4KTsKKwlpZiAoIXNlc3MpCisJCXJldHVybiAtRUlOVkFMOworCisJc2htID0gZ2V0 X21zZ19hcmcoY3R4LCBhcmctPm51bV9wYXJhbXMsICZtc2dfYXJnLCAmbXNnX3BhcmcpOworCWlm IChJU19FUlIoc2htKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2htKTsKKwltc2dfYXJnLT5jbWQgPSBP UFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5EOworCW1zZ19hcmctPmZ1bmMgPSBhcmctPmZ1bmM7 CisJbXNnX2FyZy0+c2Vzc2lvbiA9IGFyZy0+c2Vzc2lvbjsKKwltc2dfYXJnLT5jYW5jZWxfaWQg PSBhcmctPmNhbmNlbF9pZDsKKworCXJjID0gb3B0ZWVfdG9fbXNnX3BhcmFtKG1zZ19hcmctPnBh cmFtcywgYXJnLT5udW1fcGFyYW1zLCBwYXJhbSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwor CWlmIChvcHRlZV9kb19jYWxsX3dpdGhfYXJnKGN0eCwgbXNnX3BhcmcpKSB7CisJCW1zZ19hcmct PnJldCA9IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwkJbXNnX2FyZy0+cmV0X29yaWdpbiA9 IFRFRUNfT1JJR0lOX0NPTU1TOworCX0KKworCWlmIChvcHRlZV9mcm9tX21zZ19wYXJhbShwYXJh bSwgYXJnLT5udW1fcGFyYW1zLCBtc2dfYXJnLT5wYXJhbXMpKSB7CisJCW1zZ19hcmctPnJldCA9 IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwkJbXNnX2FyZy0+cmV0X29yaWdpbiA9IFRFRUNf T1JJR0lOX0NPTU1TOworCX0KKworCWFyZy0+cmV0ID0gbXNnX2FyZy0+cmV0OworCWFyZy0+cmV0 X29yaWdpbiA9IG1zZ19hcmctPnJldF9vcmlnaW47CitvdXQ6CisJdGVlX3NobV9mcmVlKHNobSk7 CisJcmV0dXJuIHJjOworfQorCitpbnQgb3B0ZWVfY2FuY2VsX3JlcShzdHJ1Y3QgdGVlX2NvbnRl eHQgKmN0eCwgdTMyIGNhbmNlbF9pZCwgdTMyIHNlc3Npb24pCit7CisJc3RydWN0IG9wdGVlX2Nv bnRleHRfZGF0YSAqY3R4ZGF0YSA9IGN0eC0+ZGF0YTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOwor CXN0cnVjdCBvcHRlZV9tc2dfYXJnICptc2dfYXJnOworCXBoeXNfYWRkcl90IG1zZ19wYXJnOwor CXN0cnVjdCBvcHRlZV9zZXNzaW9uICpzZXNzOworCisJLyogQ2hlY2sgdGhhdCB0aGUgc2Vzc2lv biBpcyB2YWxpZCAqLworCW11dGV4X2xvY2soJmN0eGRhdGEtPm11dGV4KTsKKwlzZXNzID0gZmlu ZF9zZXNzaW9uKGN0eGRhdGEsIHNlc3Npb24pOworCW11dGV4X3VubG9jaygmY3R4ZGF0YS0+bXV0 ZXgpOworCWlmICghc2VzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaG0gPSBnZXRfbXNnX2Fy ZyhjdHgsIDAsICZtc2dfYXJnLCAmbXNnX3BhcmcpOworCWlmIChJU19FUlIoc2htKSkKKwkJcmV0 dXJuIFBUUl9FUlIoc2htKTsKKworCW1zZ19hcmctPmNtZCA9IE9QVEVFX01TR19DTURfQ0FOQ0VM OworCW1zZ19hcmctPnNlc3Npb24gPSBzZXNzaW9uOworCW1zZ19hcmctPmNhbmNlbF9pZCA9IGNh bmNlbF9pZDsKKwlvcHRlZV9kb19jYWxsX3dpdGhfYXJnKGN0eCwgbXNnX3BhcmcpOworCisJdGVl X3NobV9mcmVlKHNobSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb3B0ZWVfZW5hYmxlX3No bV9jYWNoZSgpIC0gRW5hYmxlcyBjYWNoaW5nIG9mIHNvbWUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0 aW9uCisgKgkJCSAgICAgIGluIE9QLVRFRQorICogQG9wdGVlOgltYWluIHNlcnZpY2Ugc3RydWN0 CisgKi8KK3ZvaWQgb3B0ZWVfZW5hYmxlX3NobV9jYWNoZShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlKQor eworCXN0cnVjdCBvcHRlZV9jYWxsX3dhaXRlciB3OworCisJLyogV2UgbmVlZCB0byByZXRyeSB1 bnRpbCBzZWN1cmUgd29ybGQgaXNuJ3QgYnVzeS4gKi8KKwlvcHRlZV9jcV93YWl0X2luaXQoJm9w dGVlLT5jYWxsX3F1ZXVlLCAmdyk7CisJd2hpbGUgKHRydWUpIHsKKwkJc3RydWN0IGFybV9zbWNj Y19yZXMgcmVzOworCisJCW9wdGVlLT5pbnZva2VfZm4oT1BURUVfU01DX0VOQUJMRV9TSE1fQ0FD SEUsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkJIDAsICZyZXMpOworCQlpZiAocmVzLmEwID09IE9Q VEVFX1NNQ19SRVRVUk5fT0spCisJCQlicmVhazsKKwkJb3B0ZWVfY3Ffd2FpdF9mb3JfY29tcGxl dGlvbigmb3B0ZWUtPmNhbGxfcXVldWUsICZ3KTsKKwl9CisJb3B0ZWVfY3Ffd2FpdF9maW5hbCgm b3B0ZWUtPmNhbGxfcXVldWUsICZ3KTsKK30KKworLyoqCisgKiBvcHRlZV9kaXNhYmxlX3NobV9j YWNoZSgpIC0gRGlzYWJsZXMgY2FjaGluZyBvZiBzb21lIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlv bgorICoJCQkgICAgICBpbiBPUC1URUUKKyAqIEBvcHRlZToJbWFpbiBzZXJ2aWNlIHN0cnVjdAor ICovCit2b2lkIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKHN0cnVjdCBvcHRlZSAqb3B0ZWUpCit7 CisJc3RydWN0IG9wdGVlX2NhbGxfd2FpdGVyIHc7CisKKwkvKiBXZSBuZWVkIHRvIHJldHJ5IHVu dGlsIHNlY3VyZSB3b3JsZCBpc24ndCBidXN5LiAqLworCW9wdGVlX2NxX3dhaXRfaW5pdCgmb3B0 ZWUtPmNhbGxfcXVldWUsICZ3KTsKKwl3aGlsZSAodHJ1ZSkgeworCQl1bmlvbiB7CisJCQlzdHJ1 Y3QgYXJtX3NtY2NjX3JlcyBzbWNjYzsKKwkJCXN0cnVjdCBvcHRlZV9zbWNfZGlzYWJsZV9zaG1f Y2FjaGVfcmVzdWx0IHJlc3VsdDsKKwkJfSByZXM7CisKKwkJb3B0ZWUtPmludm9rZV9mbihPUFRF RV9TTUNfRElTQUJMRV9TSE1fQ0FDSEUsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkJIDAsICZyZXMu c21jY2MpOworCQlpZiAocmVzLnJlc3VsdC5zdGF0dXMgPT0gT1BURUVfU01DX1JFVFVSTl9FTk9U QVZBSUwpCisJCQlicmVhazsgLyogQWxsIHNobSdzIGZyZWVkICovCisJCWlmIChyZXMucmVzdWx0 LnN0YXR1cyA9PSBPUFRFRV9TTUNfUkVUVVJOX09LKSB7CisJCQlzdHJ1Y3QgdGVlX3NobSAqc2ht OworCisJCQlzaG0gPSByZWdfcGFpcl90b19wdHIocmVzLnJlc3VsdC5zaG1fdXBwZXIzMiwKKwkJ CQkJICAgICAgcmVzLnJlc3VsdC5zaG1fbG93ZXIzMik7CisJCQl0ZWVfc2htX2ZyZWUoc2htKTsK KwkJfSBlbHNlIHsKKwkJCW9wdGVlX2NxX3dhaXRfZm9yX2NvbXBsZXRpb24oJm9wdGVlLT5jYWxs X3F1ZXVlLCAmdyk7CisJCX0KKwl9CisJb3B0ZWVfY3Ffd2FpdF9maW5hbCgmb3B0ZWUtPmNhbGxf cXVldWUsICZ3KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL2NvcmUuYyBiL2Ry aXZlcnMvdGVlL29wdGVlL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmU5NjYwYzllZDU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVl L2NvcmUuYwpAQCAtMCwwICsxLDYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgTGlu YXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJl IGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtC VUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90ZWVfZHJ2Lmg+CisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAib3B0ZWVf cHJpdmF0ZS5oIgorI2luY2x1ZGUgIm9wdGVlX3NtYy5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1F ICJvcHRlZSIKKworI2RlZmluZSBPUFRFRV9TSE1fTlVNX1BSSVZfUEFHRVMJMQorCisvKioKKyAq IG9wdGVlX2Zyb21fbXNnX3BhcmFtKCkgLSBjb252ZXJ0IGZyb20gT1BURUVfTVNHIHBhcmFtZXRl cnMgdG8KKyAqCQkJICAgIHN0cnVjdCB0ZWVfcGFyYW0KKyAqIEBwYXJhbXM6CXN1YnN5c3RlbSBp bnRlcm5hbCBwYXJhbWV0ZXIgcmVwcmVzZW50YXRpb24KKyAqIEBudW1fcGFyYW1zOgludW1iZXIg b2YgZWxlbWVudHMgaW4gdGhlIHBhcmFtZXRlciBhcnJheXMKKyAqIEBtc2dfcGFyYW1zOglPUFRF RV9NU0cgcGFyYW1ldGVycworICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgPDAgb24gZmFpbHVy ZQorICovCitpbnQgb3B0ZWVfZnJvbV9tc2dfcGFyYW0oc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1z LCBzaXplX3QgbnVtX3BhcmFtcywKKwkJCSBjb25zdCBzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICpt c2dfcGFyYW1zKQoreworCWludCByYzsKKwlzaXplX3QgbjsKKwlzdHJ1Y3QgdGVlX3NobSAqc2ht OworCXBoeXNfYWRkcl90IHBhOworCisJZm9yIChuID0gMDsgbiA8IG51bV9wYXJhbXM7IG4rKykg eworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKwkJY29uc3Qgc3RydWN0IG9w dGVlX21zZ19wYXJhbSAqbXAgPSBtc2dfcGFyYW1zICsgbjsKKwkJdTMyIGF0dHIgPSBtcC0+YXR0 ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFTSzsKKworCQlzd2l0Y2ggKGF0dHIpIHsKKwkJY2Fz ZSBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkU6CisJCQlwLT5hdHRyID0gVEVFX0lPQ1RMX1BBUkFN X0FUVFJfVFlQRV9OT05FOworCQkJbWVtc2V0KCZwLT51LCAwLCBzaXplb2YocC0+dSkpOworCQkJ YnJlYWs7CisJCWNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTlBVVDoKKwkJY2FzZSBP UFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKKwkJY2FzZSBPUFRFRV9NU0dfQVRUUl9U WVBFX1ZBTFVFX0lOT1VUOgorCQkJcC0+YXR0ciA9IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf VkFMVUVfSU5QVVQgKworCQkJCSAgYXR0ciAtIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5Q VVQ7CisJCQlwLT51LnZhbHVlLmEgPSBtcC0+dS52YWx1ZS5hOworCQkJcC0+dS52YWx1ZS5iID0g bXAtPnUudmFsdWUuYjsKKwkJCXAtPnUudmFsdWUuYyA9IG1wLT51LnZhbHVlLmM7CisJCQlicmVh azsKKwkJY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ6CisJCWNhc2UgT1BURUVf TVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKKwkJY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RN RU1fSU5PVVQ6CisJCQlwLT5hdHRyID0gVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZf SU5QVVQgKworCQkJCSAgYXR0ciAtIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTlBVVDsKKwkJ CXAtPnUubWVtcmVmLnNpemUgPSBtcC0+dS50bWVtLnNpemU7CisJCQlzaG0gPSAoc3RydWN0IHRl ZV9zaG0gKikodW5zaWduZWQgbG9uZykKKwkJCQltcC0+dS50bWVtLnNobV9yZWY7CisJCQlpZiAo IXNobSkgeworCQkJCXAtPnUubWVtcmVmLnNobV9vZmZzID0gMDsKKwkJCQlwLT51Lm1lbXJlZi5z aG0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJcmMgPSB0ZWVfc2htX2dldF9wYShzaG0s IDAsICZwYSk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQkJcC0+dS5tZW1yZWYuc2ht X29mZnMgPSBtcC0+dS50bWVtLmJ1Zl9wdHIgLSBwYTsKKwkJCXAtPnUubWVtcmVmLnNobSA9IHNo bTsKKworCQkJLyogQ2hlY2sgdGhhdCB0aGUgbWVtcmVmIGlzIGNvdmVyZWQgYnkgdGhlIHNobSBv YmplY3QgKi8KKwkJCWlmIChwLT51Lm1lbXJlZi5zaXplKSB7CisJCQkJc2l6ZV90IG8gPSBwLT51 Lm1lbXJlZi5zaG1fb2ZmcyArCisJCQkJCSAgIHAtPnUubWVtcmVmLnNpemUgLSAxOworCisJCQkJ cmMgPSB0ZWVfc2htX2dldF9wYShzaG0sIG8sIE5VTEwpOworCQkJCWlmIChyYykKKwkJCQkJcmV0 dXJuIHJjOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvcHRlZV90b19tc2dfcGFyYW0oKSAt IGNvbnZlcnQgZnJvbSBzdHJ1Y3QgdGVlX3BhcmFtcyB0byBPUFRFRV9NU0cgcGFyYW1ldGVycwor ICogQG1zZ19wYXJhbXM6CU9QVEVFX01TRyBwYXJhbWV0ZXJzCisgKiBAbnVtX3BhcmFtczoJbnVt YmVyIG9mIGVsZW1lbnRzIGluIHRoZSBwYXJhbWV0ZXIgYXJyYXlzCisgKiBAcGFyYW1zOglzdWJz eXN0ZW0gaXRuZXJuYWwgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uCisgKiBSZXR1cm5zIDAgb24g c3VjY2VzcyBvciA8MCBvbiBmYWlsdXJlCisgKi8KK2ludCBvcHRlZV90b19tc2dfcGFyYW0oc3Ry dWN0IG9wdGVlX21zZ19wYXJhbSAqbXNnX3BhcmFtcywgc2l6ZV90IG51bV9wYXJhbXMsCisJCSAg ICAgICBjb25zdCBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7CisJaW50IHJjOworCXNpemVf dCBuOworCXBoeXNfYWRkcl90IHBhOworCisJZm9yIChuID0gMDsgbiA8IG51bV9wYXJhbXM7IG4r KykgeworCQljb25zdCBzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKwkJc3RydWN0 IG9wdGVlX21zZ19wYXJhbSAqbXAgPSBtc2dfcGFyYW1zICsgbjsKKworCQlzd2l0Y2ggKHAtPmF0 dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX05PTkU6CisJCQltcC0+YXR0 ciA9IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTk9ORTsKKwkJCW1lbXNldCgmbXAtPnUsIDAs IHNpemVvZihtcC0+dSkpOworCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJf VFlQRV9WQUxVRV9JTlBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVF X09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgor CQkJbXAtPmF0dHIgPSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUICsgcC0+YXR0ciAt CisJCQkJICAgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTlBVVDsKKwkJCW1wLT51 LnZhbHVlLmEgPSBwLT51LnZhbHVlLmE7CisJCQltcC0+dS52YWx1ZS5iID0gcC0+dS52YWx1ZS5i OworCQkJbXAtPnUudmFsdWUuYyA9IHAtPnUudmFsdWUuYzsKKwkJCWJyZWFrOworCQljYXNlIFRF RV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOUFVUOgorCQljYXNlIFRFRV9JT0NUTF9Q QVJBTV9BVFRSX1RZUEVfTUVNUkVGX09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRU Ul9UWVBFX01FTVJFRl9JTk9VVDoKKwkJCW1wLT5hdHRyID0gT1BURUVfTVNHX0FUVFJfVFlQRV9U TUVNX0lOUFVUICsKKwkJCQkgICBwLT5hdHRyIC0KKwkJCQkgICBURUVfSU9DVExfUEFSQU1fQVRU Ul9UWVBFX01FTVJFRl9JTlBVVDsKKwkJCW1wLT51LnRtZW0uc2htX3JlZiA9ICh1bnNpZ25lZCBs b25nKXAtPnUubWVtcmVmLnNobTsKKwkJCW1wLT51LnRtZW0uc2l6ZSA9IHAtPnUubWVtcmVmLnNp emU7CisJCQlpZiAoIXAtPnUubWVtcmVmLnNobSkgeworCQkJCW1wLT51LnRtZW0uYnVmX3B0ciA9 IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyYyA9IHRlZV9zaG1fZ2V0X3BhKHAtPnUubWVtcmVm LnNobSwKKwkJCQkJICAgIHAtPnUubWVtcmVmLnNobV9vZmZzLCAmcGEpOworCQkJaWYgKHJjKQor CQkJCXJldHVybiByYzsKKwkJCW1wLT51LnRtZW0uYnVmX3B0ciA9IHBhOworCQkJbXAtPmF0dHIg fD0gT1BURUVfTVNHX0FUVFJfQ0FDSEVfUFJFREVGSU5FRCA8PAorCQkJCQlPUFRFRV9NU0dfQVRU Ul9DQUNIRV9TSElGVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGVlX2dldF92ZXJzaW9u KHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYsCisJCQkgICAgICBzdHJ1Y3QgdGVlX2lvY3RsX3Zl cnNpb25fZGF0YSAqdmVycykKK3sKKwlzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSB2ID0g eworCQkuaW1wbF9pZCA9IFRFRV9JTVBMX0lEX09QVEVFLAorCQkuaW1wbF9jYXBzID0gVEVFX09Q VEVFX0NBUF9UWiwKKwkJLmdlbl9jYXBzID0gVEVFX0dFTl9DQVBfR1AsCisJfTsKKwkqdmVycyA9 IHY7Cit9CisKK3N0YXRpYyBpbnQgb3B0ZWVfb3BlbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCkK K3sKKwlzdHJ1Y3Qgb3B0ZWVfY29udGV4dF9kYXRhICpjdHhkYXRhOworCXN0cnVjdCB0ZWVfZGV2 aWNlICp0ZWVkZXYgPSBjdHgtPnRlZWRldjsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dl dF9kcnZkYXRhKHRlZWRldik7CisKKwljdHhkYXRhID0ga3phbGxvYyhzaXplb2YoKmN0eGRhdGEp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYg KHRlZWRldiA9PSBvcHRlZS0+c3VwcF90ZWVkZXYpIHsKKwkJYm9vbCBidXN5ID0gdHJ1ZTsKKwor CQltdXRleF9sb2NrKCZvcHRlZS0+c3VwcC5jdHhfbXV0ZXgpOworCQlpZiAoIW9wdGVlLT5zdXBw LmN0eCkgeworCQkJYnVzeSA9IGZhbHNlOworCQkJb3B0ZWUtPnN1cHAuY3R4ID0gY3R4OworCQl9 CisJCW11dGV4X3VubG9jaygmb3B0ZWUtPnN1cHAuY3R4X211dGV4KTsKKwkJaWYgKGJ1c3kpIHsK KwkJCWtmcmVlKGN0eGRhdGEpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCW11dGV4 X2luaXQoJmN0eGRhdGEtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4ZGF0YS0+c2Vzc19s aXN0KTsKKworCWN0eC0+ZGF0YSA9IGN0eGRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIG9wdGVlX3JlbGVhc2Uoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IG9w dGVlX2NvbnRleHRfZGF0YSAqY3R4ZGF0YSA9IGN0eC0+ZGF0YTsKKwlzdHJ1Y3QgdGVlX2Rldmlj ZSAqdGVlZGV2ID0gY3R4LT50ZWVkZXY7CisJc3RydWN0IG9wdGVlICpvcHRlZSA9IHRlZV9nZXRf ZHJ2ZGF0YSh0ZWVkZXYpOworCXN0cnVjdCB0ZWVfc2htICpzaG07CisJc3RydWN0IG9wdGVlX21z Z19hcmcgKmFyZyA9IE5VTEw7CisJcGh5c19hZGRyX3QgcGFyZzsKKwlzdHJ1Y3Qgb3B0ZWVfc2Vz c2lvbiAqc2VzczsKKwlzdHJ1Y3Qgb3B0ZWVfc2Vzc2lvbiAqc2Vzc190bXA7CisKKwlpZiAoIWN0 eGRhdGEpCisJCXJldHVybjsKKworCXNobSA9IHRlZV9zaG1fYWxsb2MoY3R4LCBzaXplb2Yoc3Ry dWN0IG9wdGVlX21zZ19hcmcpLCBURUVfU0hNX01BUFBFRCk7CisJaWYgKCFJU19FUlIoc2htKSkg eworCQlhcmcgPSB0ZWVfc2htX2dldF92YShzaG0sIDApOworCQkvKgorCQkgKiBJZiB2YTJwYSBm YWlscyBmb3Igc29tZSByZWFzb24sIHdlIGNhbid0IGNhbGwKKwkJICogb3B0ZWVfY2xvc2Vfc2Vz c2lvbigpLCBvbmx5IGZyZWUgdGhlIG1lbW9yeS4gU2VjdXJlIE9TCisJCSAqIHdpbGwgbGVhayBz ZXNzaW9ucyBhbmQgZmluYWxseSByZWZ1c2UgbW9yZSBzZXNzaW9ucywgYnV0CisJCSAqIHdlIHdp bGwgYXQgbGVhc3QgbGV0IG5vcm1hbCB3b3JsZCByZWNsYWltIGl0cyBtZW1vcnkuCisJCSAqLwor CQlpZiAoIUlTX0VSUihhcmcpKQorCQkJdGVlX3NobV92YTJwYShzaG0sIGFyZywgJnBhcmcpOwor CX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXNzLCBzZXNzX3RtcCwgJmN0eGRhdGEt PnNlc3NfbGlzdCwKKwkJCQkgbGlzdF9ub2RlKSB7CisJCWxpc3RfZGVsKCZzZXNzLT5saXN0X25v ZGUpOworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGFyZykpIHsKKwkJCW1lbXNldChhcmcsIDAsIHNp emVvZigqYXJnKSk7CisJCQlhcmctPmNtZCA9IE9QVEVFX01TR19DTURfQ0xPU0VfU0VTU0lPTjsK KwkJCWFyZy0+c2Vzc2lvbiA9IHNlc3MtPnNlc3Npb25faWQ7CisJCQlvcHRlZV9kb19jYWxsX3dp dGhfYXJnKGN0eCwgcGFyZyk7CisJCX0KKwkJa2ZyZWUoc2Vzcyk7CisJfQorCWtmcmVlKGN0eGRh dGEpOworCisJaWYgKCFJU19FUlIoc2htKSkKKwkJdGVlX3NobV9mcmVlKHNobSk7CisKKwljdHgt PmRhdGEgPSBOVUxMOworCisJaWYgKHRlZWRldiA9PSBvcHRlZS0+c3VwcF90ZWVkZXYpIHsKKwkJ bXV0ZXhfbG9jaygmb3B0ZWUtPnN1cHAuY3R4X211dGV4KTsKKwkJb3B0ZWUtPnN1cHAuY3R4ID0g TlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZvcHRlZS0+c3VwcC5jdHhfbXV0ZXgpOworCX0KK30KKwor c3RhdGljIHN0cnVjdCB0ZWVfZHJpdmVyX29wcyBvcHRlZV9vcHMgPSB7CisJLmdldF92ZXJzaW9u ID0gb3B0ZWVfZ2V0X3ZlcnNpb24sCisJLm9wZW4gPSBvcHRlZV9vcGVuLAorCS5yZWxlYXNlID0g b3B0ZWVfcmVsZWFzZSwKKwkub3Blbl9zZXNzaW9uID0gb3B0ZWVfb3Blbl9zZXNzaW9uLAorCS5j bG9zZV9zZXNzaW9uID0gb3B0ZWVfY2xvc2Vfc2Vzc2lvbiwKKwkuaW52b2tlX2Z1bmMgPSBvcHRl ZV9pbnZva2VfZnVuYywKKwkuY2FuY2VsX3JlcSA9IG9wdGVlX2NhbmNlbF9yZXEsCit9OworCitz dGF0aWMgc3RydWN0IHRlZV9kZXNjIG9wdGVlX2Rlc2MgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFN RSAiLWNsbnQiLAorCS5vcHMgPSAmb3B0ZWVfb3BzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAor fTsKKworc3RhdGljIHN0cnVjdCB0ZWVfZHJpdmVyX29wcyBvcHRlZV9zdXBwX29wcyA9IHsKKwku Z2V0X3ZlcnNpb24gPSBvcHRlZV9nZXRfdmVyc2lvbiwKKwkub3BlbiA9IG9wdGVlX29wZW4sCisJ LnJlbGVhc2UgPSBvcHRlZV9yZWxlYXNlLAorCS5zdXBwX3JlY3YgPSBvcHRlZV9zdXBwX3JlY3Ys CisJLnN1cHBfc2VuZCA9IG9wdGVlX3N1cHBfc2VuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGVl X2Rlc2Mgb3B0ZWVfc3VwcF9kZXNjID0geworCS5uYW1lID0gRFJJVkVSX05BTUUgIi1zdXBwIiwK Kwkub3BzID0gJm9wdGVlX3N1cHBfb3BzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mbGFn cyA9IFRFRV9ERVNDX1BSSVZJTEVHRUQsCit9OworCitzdGF0aWMgYm9vbCBvcHRlZV9tc2dfYXBp X3VpZF9pc19vcHRlZV9hcGkob3B0ZWVfaW52b2tlX2ZuICppbnZva2VfZm4pCit7CisJc3RydWN0 IGFybV9zbWNjY19yZXMgcmVzOworCisJaW52b2tlX2ZuKE9QVEVFX1NNQ19DQUxMU19VSUQsIDAs IDAsIDAsIDAsIDAsIDAsIDAsICZyZXMpOworCisJaWYgKHJlcy5hMCA9PSBPUFRFRV9NU0dfVUlE XzAgJiYgcmVzLmExID09IE9QVEVFX01TR19VSURfMSAmJgorCSAgICByZXMuYTIgPT0gT1BURUVf TVNHX1VJRF8yICYmIHJlcy5hMyA9PSBPUFRFRV9NU0dfVUlEXzMpCisJCXJldHVybiB0cnVlOwor CXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgb3B0ZWVfbXNnX2FwaV9yZXZpc2lvbl9p c19jb21wYXRpYmxlKG9wdGVlX2ludm9rZV9mbiAqaW52b2tlX2ZuKQoreworCXVuaW9uIHsKKwkJ c3RydWN0IGFybV9zbWNjY19yZXMgc21jY2M7CisJCXN0cnVjdCBvcHRlZV9zbWNfY2FsbHNfcmV2 aXNpb25fcmVzdWx0IHJlc3VsdDsKKwl9IHJlczsKKworCWludm9rZV9mbihPUFRFRV9TTUNfQ0FM TFNfUkVWSVNJT04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsICZyZXMuc21jY2MpOworCisJaWYgKHJl cy5yZXN1bHQubWFqb3IgPT0gT1BURUVfTVNHX1JFVklTSU9OX01BSk9SICYmCisJICAgIChpbnQp cmVzLnJlc3VsdC5taW5vciA+PSBPUFRFRV9NU0dfUkVWSVNJT05fTUlOT1IpCisJCXJldHVybiB0 cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgb3B0ZWVfbXNnX2V4Y2hhbmdl X2NhcGFiaWxpdGllcyhvcHRlZV9pbnZva2VfZm4gKmludm9rZV9mbiwKKwkJCQkJICAgIHUzMiAq c2VjX2NhcHMpCit7CisJdW5pb24geworCQlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyBzbWNjYzsKKwkJ c3RydWN0IG9wdGVlX3NtY19leGNoYW5nZV9jYXBhYmlsaXRpZXNfcmVzdWx0IHJlc3VsdDsKKwl9 IHJlczsKKwl1MzIgYTEgPSAwOworCisJLyoKKwkgKiBUT0RPIFRoaXMgaXNuJ3QgZW5vdWdoIHRv IHRlbGwgaWYgaXQncyBVUCBzeXN0ZW0gKGZyb20ga2VybmVsCisJICogcG9pbnQgb2Ygdmlldykg b3Igbm90LCBpc19zbXAoKSByZXR1cm5zIHRoZSB0aGUgaW5mb3JtYXRpb24KKwkgKiBuZWVkZWQs IGJ1dCBjYW4ndCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBoZXJlLgorCSAqLworI2lmbmRlZiBD T05GSUdfU01QCisJYTEgfD0gT1BURUVfU01DX05TRUNfQ0FQX1VOSVBST0NFU1NPUjsKKyNlbmRp ZgorCisJaW52b2tlX2ZuKE9QVEVFX1NNQ19FWENIQU5HRV9DQVBBQklMSVRJRVMsIGExLCAwLCAw LCAwLCAwLCAwLCAwLAorCQkgICZyZXMuc21jY2MpOworCisJaWYgKHJlcy5yZXN1bHQuc3RhdHVz ICE9IE9QVEVFX1NNQ19SRVRVUk5fT0spCisJCXJldHVybiBmYWxzZTsKKworCSpzZWNfY2FwcyA9 IHJlcy5yZXN1bHQuY2FwYWJpbGl0aWVzOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3Ry dWN0IHRlZV9zaG1fcG9vbCAqCitvcHRlZV9jb25maWdfc2htX21lbXJlbWFwKG9wdGVlX2ludm9r ZV9mbiAqaW52b2tlX2ZuLCB2b2lkICoqbWVtcmVtYXBlZF9zaG0pCit7CisJdW5pb24geworCQlz dHJ1Y3QgYXJtX3NtY2NjX3JlcyBzbWNjYzsKKwkJc3RydWN0IG9wdGVlX3NtY19nZXRfc2htX2Nv bmZpZ19yZXN1bHQgcmVzdWx0OworCX0gcmVzOworCXN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2w7 CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKwlzaXplX3Qgc2l6 ZTsKKwlwaHlzX2FkZHJfdCBiZWdpbjsKKwlwaHlzX2FkZHJfdCBlbmQ7CisJdm9pZCAqdmE7CisJ c3RydWN0IHRlZV9zaG1fcG9vbF9tZW1faW5mbyBwcml2X2luZm87CisJc3RydWN0IHRlZV9zaG1f cG9vbF9tZW1faW5mbyBkbWFidWZfaW5mbzsKKworCWludm9rZV9mbihPUFRFRV9TTUNfR0VUX1NI TV9DT05GSUcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICZyZXMuc21jY2MpOworCWlmIChyZXMucmVz dWx0LnN0YXR1cyAhPSBPUFRFRV9TTUNfUkVUVVJOX09LKSB7CisJCXByX2luZm8oInNobSBzZXJ2 aWNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwl9CisK KwlpZiAocmVzLnJlc3VsdC5zZXR0aW5ncyAhPSBPUFRFRV9TTUNfU0hNX0NBQ0hFRCkgeworCQlw cl9lcnIoIm9ubHkgbm9ybWFsIGNhY2hlZCBzaGFyZWQgbWVtb3J5IHN1cHBvcnRlZFxuIik7CisJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWJlZ2luID0gcm91bmR1cChyZXMucmVz dWx0LnN0YXJ0LCBQQUdFX1NJWkUpOworCWVuZCA9IHJvdW5kZG93bihyZXMucmVzdWx0LnN0YXJ0 ICsgcmVzLnJlc3VsdC5zaXplLCBQQUdFX1NJWkUpOworCXBhZGRyID0gYmVnaW47CisJc2l6ZSA9 IGVuZCAtIGJlZ2luOworCisJaWYgKHNpemUgPCAyICogT1BURUVfU0hNX05VTV9QUklWX1BBR0VT ICogUEFHRV9TSVpFKSB7CisJCXByX2VycigidG9vIHNtYWxsIHNoYXJlZCBtZW1vcnkgYXJlYVxu Iik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXZhID0gbWVtcmVtYXAocGFk ZHIsIHNpemUsIE1FTVJFTUFQX1dCKTsKKwlpZiAoIXZhKSB7CisJCXByX2Vycigic2hhcmVkIG1l bW9yeSBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0K Kwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXZhOworCisJcHJpdl9pbmZvLnZhZGRyID0gdmFkZHI7 CisJcHJpdl9pbmZvLnBhZGRyID0gcGFkZHI7CisJcHJpdl9pbmZvLnNpemUgPSBPUFRFRV9TSE1f TlVNX1BSSVZfUEFHRVMgKiBQQUdFX1NJWkU7CisJZG1hYnVmX2luZm8udmFkZHIgPSB2YWRkciAr IE9QVEVFX1NITV9OVU1fUFJJVl9QQUdFUyAqIFBBR0VfU0laRTsKKwlkbWFidWZfaW5mby5wYWRk ciA9IHBhZGRyICsgT1BURUVfU0hNX05VTV9QUklWX1BBR0VTICogUEFHRV9TSVpFOworCWRtYWJ1 Zl9pbmZvLnNpemUgPSBzaXplIC0gT1BURUVfU0hNX05VTV9QUklWX1BBR0VTICogUEFHRV9TSVpF OworCisJcG9vbCA9IHRlZV9zaG1fcG9vbF9hbGxvY19yZXNfbWVtKCZwcml2X2luZm8sICZkbWFi dWZfaW5mbyk7CisJaWYgKElTX0VSUihwb29sKSkgeworCQltZW11bm1hcCh2YSk7CisJCWdvdG8g b3V0OworCX0KKworCSptZW1yZW1hcGVkX3NobSA9IHZhOworb3V0OgorCXJldHVybiBwb29sOwor fQorCitzdGF0aWMgb3B0ZWVfaW52b2tlX2ZuICpnZXRfaW52b2tlX2Z1bmMoc3RydWN0IGRldmlj ZV9ub2RlICpucCkKK3sKKwljb25zdCBjaGFyICptZXRob2Q7CisKKwlwcl9pbmZvKCJwcm9iaW5n IGZvciBjb25kdWl0IG1ldGhvZCBmcm9tIERULlxuIik7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVh ZF9zdHJpbmcobnAsICJtZXRob2QiLCAmbWV0aG9kKSkgeworCQlwcl93YXJuKCJtaXNzaW5nIFwi bWV0aG9kXCIgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOworCX0KKwor CWlmICghc3RyY21wKCJodmMiLCBtZXRob2QpKQorCQlyZXR1cm4gYXJtX3NtY2NjX2h2YzsKKwll bHNlIGlmICghc3RyY21wKCJzbWMiLCBtZXRob2QpKQorCQlyZXR1cm4gYXJtX3NtY2NjX3NtYzsK KworCXByX3dhcm4oImludmFsaWQgXCJtZXRob2RcIiBwcm9wZXJ0eTogJXNcbiIsIG1ldGhvZCk7 CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWUgKm9w dGVlX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJb3B0ZWVfaW52b2tlX2ZuICpp bnZva2VfZm47CisJc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbDsKKwlzdHJ1Y3Qgb3B0ZWUgKm9w dGVlID0gTlVMTDsKKwl2b2lkICptZW1yZW1hcGVkX3NobSA9IE5VTEw7CisJc3RydWN0IHRlZV9k ZXZpY2UgKnRlZWRldjsKKwl1MzIgc2VjX2NhcHM7CisJaW50IHJjOworCisJaW52b2tlX2ZuID0g Z2V0X2ludm9rZV9mdW5jKG5wKTsKKwlpZiAoSVNfRVJSKGludm9rZV9mbikpCisJCXJldHVybiAo dm9pZCAqKWludm9rZV9mbjsKKworCWlmICghb3B0ZWVfbXNnX2FwaV91aWRfaXNfb3B0ZWVfYXBp KGludm9rZV9mbikpIHsKKwkJcHJfd2FybigiYXBpIHVpZCBtaXNtYXRjaFxuIik7CisJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlmICghb3B0ZWVfbXNnX2FwaV9yZXZpc2lvbl9p c19jb21wYXRpYmxlKGludm9rZV9mbikpIHsKKwkJcHJfd2FybigiYXBpIHJldmlzaW9uIG1pc21h dGNoXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKCFvcHRlZV9t c2dfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKGludm9rZV9mbiwgJnNlY19jYXBzKSkgeworCQlwcl93 YXJuKCJjYXBhYmlsaXRpZXMgbWlzbWF0Y2hcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgbm8gb3RoZXIgb3B0aW9uIGZvciBzaGFyZWQgbWVt b3J5LCBpZiBzZWN1cmUgd29ybGQKKwkgKiBkb2Vzbid0IGhhdmUgYW55IHJlc2VydmVkIG1lbW9y eSB3ZSBjYW4gdXNlIHdlIGNhbid0IGNvbnRpbnVlLgorCSAqLworCWlmICghKHNlY19jYXBzICYg T1BURUVfU01DX1NFQ19DQVBfSEFWRV9SRVNFUlZFUkVEX1NITSkpCisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCisJcG9vbCA9IG9wdGVlX2NvbmZpZ19zaG1fbWVtcmVtYXAoaW52b2tlX2Zu LCAmbWVtcmVtYXBlZF9zaG0pOworCWlmIChJU19FUlIocG9vbCkpCisJCXJldHVybiAodm9pZCAq KXBvb2w7CisKKwlvcHRlZSA9IGt6YWxsb2Moc2l6ZW9mKCpvcHRlZSksIEdGUF9LRVJORUwpOwor CWlmICghb3B0ZWUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlvcHRl ZS0+aW52b2tlX2ZuID0gaW52b2tlX2ZuOworCisJdGVlZGV2ID0gdGVlX2RldmljZV9hbGxvYygm b3B0ZWVfZGVzYywgTlVMTCwgcG9vbCwgb3B0ZWUpOworCWlmIChJU19FUlIodGVlZGV2KSkgewor CQlyYyA9IFBUUl9FUlIodGVlZGV2KTsKKwkJZ290byBlcnI7CisJfQorCW9wdGVlLT50ZWVkZXYg PSB0ZWVkZXY7CisKKwl0ZWVkZXYgPSB0ZWVfZGV2aWNlX2FsbG9jKCZvcHRlZV9zdXBwX2Rlc2Ms IE5VTEwsIHBvb2wsIG9wdGVlKTsKKwlpZiAoSVNfRVJSKHRlZWRldikpIHsKKwkJcmMgPSBQVFJf RVJSKHRlZWRldik7CisJCWdvdG8gZXJyOworCX0KKwlvcHRlZS0+c3VwcF90ZWVkZXYgPSB0ZWVk ZXY7CisKKwlyYyA9IHRlZV9kZXZpY2VfcmVnaXN0ZXIob3B0ZWUtPnRlZWRldik7CisJaWYgKHJj KQorCQlnb3RvIGVycjsKKworCXJjID0gdGVlX2RldmljZV9yZWdpc3RlcihvcHRlZS0+c3VwcF90 ZWVkZXYpOworCWlmIChyYykKKwkJZ290byBlcnI7CisKKwltdXRleF9pbml0KCZvcHRlZS0+Y2Fs bF9xdWV1ZS5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJm9wdGVlLT5jYWxsX3F1ZXVlLndhaXRl cnMpOworCW9wdGVlX3dhaXRfcXVldWVfaW5pdCgmb3B0ZWUtPndhaXRfcXVldWUpOworCW9wdGVl X3N1cHBfaW5pdCgmb3B0ZWUtPnN1cHApOworCW9wdGVlLT5tZW1yZW1hcGVkX3NobSA9IG1lbXJl bWFwZWRfc2htOworCW9wdGVlLT5wb29sID0gcG9vbDsKKworCW9wdGVlX2VuYWJsZV9zaG1fY2Fj aGUob3B0ZWUpOworCisJcHJfaW5mbygiaW5pdGlhbGl6ZWQgZHJpdmVyXG4iKTsKKwlyZXR1cm4g b3B0ZWU7CitlcnI6CisJaWYgKG9wdGVlKSB7CisJCS8qCisJCSAqIHRlZV9kZXZpY2VfdW5yZWdp c3RlcigpIGlzIHNhZmUgdG8gY2FsbCBldmVuIGlmIHRoZQorCQkgKiBkZXZpY2VzIGhhc24ndCBi ZWVuIHJlZ2lzdGVyZWQgd2l0aAorCQkgKiB0ZWVfZGV2aWNlX3JlZ2lzdGVyKCkgeWV0LgorCQkg Ki8KKwkJdGVlX2RldmljZV91bnJlZ2lzdGVyKG9wdGVlLT5zdXBwX3RlZWRldik7CisJCXRlZV9k ZXZpY2VfdW5yZWdpc3RlcihvcHRlZS0+dGVlZGV2KTsKKwkJa2ZyZWUob3B0ZWUpOworCX0KKwlp ZiAocG9vbCkKKwkJdGVlX3NobV9wb29sX2ZyZWUocG9vbCk7CisJaWYgKG1lbXJlbWFwZWRfc2ht KQorCQltZW11bm1hcChtZW1yZW1hcGVkX3NobSk7CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQor CitzdGF0aWMgdm9pZCBvcHRlZV9yZW1vdmUoc3RydWN0IG9wdGVlICpvcHRlZSkKK3sKKwkvKgor CSAqIEFzayBPUC1URUUgdG8gZnJlZSBhbGwgY2FjaGVkIHNoYXJlZCBtZW1vcnkgb2JqZWN0cyB0 byBkZWNyZWFzZQorCSAqIHJlZmVyZW5jZSBjb3VudGVycyBhbmQgYWxzbyBhdm9pZCB3aWxkIHBv aW50ZXJzIGluIHNlY3VyZSB3b3JsZAorCSAqIGludG8gdGhlIG9sZCBzaGFyZWQgbWVtb3J5IHJh bmdlLgorCSAqLworCW9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKG9wdGVlKTsKKworCS8qCisJICog VGhlIHR3byBkZXZpY2VzIGhhcyB0byBiZSB1bnJlZ2lzdGVyZWQgYmVmb3JlIHdlIGNhbiBmcmVl IHRoZQorCSAqIG90aGVyIHJlc291cmNlcy4KKwkgKi8KKwl0ZWVfZGV2aWNlX3VucmVnaXN0ZXIo b3B0ZWUtPnN1cHBfdGVlZGV2KTsKKwl0ZWVfZGV2aWNlX3VucmVnaXN0ZXIob3B0ZWUtPnRlZWRl dik7CisKKwl0ZWVfc2htX3Bvb2xfZnJlZShvcHRlZS0+cG9vbCk7CisJaWYgKG9wdGVlLT5tZW1y ZW1hcGVkX3NobSkKKwkJbWVtdW5tYXAob3B0ZWUtPm1lbXJlbWFwZWRfc2htKTsKKwlvcHRlZV93 YWl0X3F1ZXVlX2V4aXQoJm9wdGVlLT53YWl0X3F1ZXVlKTsKKwlvcHRlZV9zdXBwX3VuaW5pdCgm b3B0ZWUtPnN1cHApOworCW11dGV4X2Rlc3Ryb3koJm9wdGVlLT5jYWxsX3F1ZXVlLm11dGV4KTsK KworCWtmcmVlKG9wdGVlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg b3B0ZWVfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImxpbmFybyxvcHRlZS10eiIgfSwK Kwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWUgKm9wdGVlX3N2YzsKKworc3RhdGljIGlu dCBfX2luaXQgb3B0ZWVfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg KmZ3X25wOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG9wdGVlICpvcHRlZTsK KworCS8qIE5vZGUgaXMgc3VwcG9zZWQgdG8gYmUgYmVsb3cgL2Zpcm13YXJlICovCisJZndfbnAg PSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmlybXdhcmUiKTsKKwlpZiAoIWZ3X25wKQor CQlyZXR1cm4gLUVOT0RFVjsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZ3X25wLCBv cHRlZV9tYXRjaCk7CisJb2Zfbm9kZV9wdXQoZndfbnApOworCWlmICghbnApCisJCXJldHVybiAt RU5PREVWOworCisJb3B0ZWUgPSBvcHRlZV9wcm9iZShucCk7CisJb2Zfbm9kZV9wdXQobnApOwor CisJaWYgKElTX0VSUihvcHRlZSkpCisJCXJldHVybiBQVFJfRVJSKG9wdGVlKTsKKworCW9wdGVl X3N2YyA9IG9wdGVlOworCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChvcHRlZV9kcml2ZXJf aW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvcHRlZV9kcml2ZXJfZXhpdCh2b2lkKQorewor CXN0cnVjdCBvcHRlZSAqb3B0ZWUgPSBvcHRlZV9zdmM7CisKKwlvcHRlZV9zdmMgPSBOVUxMOwor CWlmIChvcHRlZSkKKwkJb3B0ZWVfcmVtb3ZlKG9wdGVlKTsKK30KK21vZHVsZV9leGl0KG9wdGVl X2RyaXZlcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGluYXJvIik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIk9QLVRFRSBkcml2ZXIiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCIiKTsKK01P RFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvdGVlL29wdGVlL29wdGVlX21zZy5oIGIvZHJpdmVycy90ZWUvb3B0ZWUvb3B0 ZWVfbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZDdhMDZl ZTA0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9tc2cuaApA QCAtMCwwICsxLDQxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBMaW5hcm8g TGltaXRlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi QVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENP TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg X09QVEVFX01TR19ICisjZGVmaW5lIF9PUFRFRV9NU0dfSAorCisjaW5jbHVkZSA8bGludXgvYml0 b3BzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBkZWZp bmVzIHRoZSBPUC1URUUgbWVzc2FnZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlCisgKiB3 aXRoIGFuIGluc3RhbmNlIG9mIE9QLVRFRSBydW5uaW5nIGluIHNlY3VyZSB3b3JsZC4KKyAqCisg KiBUaGlzIGZpbGUgaXMgZGl2aWRlZCBpbnRvIHRocmVlIHNlY3Rpb25zLgorICogMS4gRm9ybWF0 dGluZyBvZiBtZXNzYWdlcy4KKyAqIDIuIFJlcXVlc3RzIGZyb20gbm9ybWFsIHdvcmxkCisgKiAz LiBSZXF1ZXN0cyBmcm9tIHNlY3VyZSB3b3JsZCwgUmVtb3RlIFByb2NlZHVyZSBDYWxsIChSUEMp LCBoYW5kbGVkIGJ5CisgKiAgICB0ZWUtc3VwcGxpY2FudC4KKyAqLworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIFBhcnQgMSAtIGZvcm1hdHRpbmcgb2YgbWVzc2FnZXMKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkUJCTB4MAorI2Rl ZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUCQkweDEKKyNkZWZpbmUgT1BURUVf TVNHX0FUVFJfVFlQRV9WQUxVRV9PVVRQVVQJMHgyCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZ UEVfVkFMVUVfSU5PVVQJCTB4MworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5Q VVQJCTB4NQorI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fT1VUUFVUCQkweDYKKyNk ZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX0lOT1VUCQkweDcKKyNkZWZpbmUgT1BURUVf TVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUCQkweDkKKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQ RV9UTUVNX09VVFBVVAkJMHhhCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTk9V VAkJMHhiCisKKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9NQVNLCQlHRU5NQVNLKDcsIDAp CisKKy8qCisgKiBNZXRhIHBhcmFtZXRlciB0byBiZSBhYnNvcmJlZCBieSB0aGUgU2VjdXJlIE9T IGFuZCBub3QgcGFzc2VkCisgKiB0byB0aGUgVHJ1c3RlZCBBcHBsaWNhdGlvbi4KKyAqCisgKiBD dXJyZW50bHkgb25seSB1c2VkIHdpdGggT1BURUVfTVNHX0NNRF9PUEVOX1NFU1NJT04uCisgKi8K KyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfTUVUQQkJCUJJVCg4KQorCisvKgorICogVGhlIHRlbXBv cmFyeSBzaGFyZWQgbWVtb3J5IG9iamVjdCBpcyBub3QgcGh5c2ljYWxseSBjb250aWdvdXMgYW5k IHRoaXMKKyAqIHRlbXAgbWVtcmVmIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZnJhZ21lbnQgdW50 aWwgdGhlIGxhc3QgdGVtcCBtZW1yZWYKKyAqIHRoYXQgZG9lc24ndCBoYXZlIHRoaXMgYml0IHNl dC4KKyAqLworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9GUkFHTUVOVAkJCUJJVCg5KQorCisvKgor ICogTWVtb3J5IGF0dHJpYnV0ZXMgZm9yIGNhY2hpbmcgcGFzc2VkIHdpdGggdGVtcCBtZW1yZWZz LiBUaGUgYWN0dWFsIHZhbHVlCisgKiB1c2VkIGlzIGRlZmluZWQgb3V0c2lkZSB0aGUgbWVzc2Fn ZSBwcm90b2NvbCB3aXRoIHRoZSBleGNlcHRpb24gb2YKKyAqIE9QVEVFX01TR19BVFRSX0NBQ0hF X1BSRURFRklORUQgd2hpY2ggbWVhbnMgdGhlIGF0dHJpYnV0ZXMgYWxyZWFkeQorICogZGVmaW5l ZCBmb3IgdGhlIG1lbW9yeSByYW5nZSBzaG91bGQgYmUgdXNlZC4gSWYgb3B0ZWVfc21jLmggaXMg dXNlZCBhcworICogYmVhcmVyIG9mIHRoaXMgcHJvdG9jb2wgT1BURUVfU01DX1NITV8qIGlzIHVz ZWQgZm9yIHZhbHVlcy4KKyAqLworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9DQUNIRV9TSElGVAkJ MTYKKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfQ0FDSEVfTUFTSwkJR0VOTUFTSygyLCAwKQorI2Rl ZmluZSBPUFRFRV9NU0dfQVRUUl9DQUNIRV9QUkVERUZJTkVECQkwCisKKy8qCisgKiBTYW1lIHZh bHVlcyBhcyBURUVfTE9HSU5fKiBmcm9tIFRFRSBJbnRlcm5hbCBBUEkKKyAqLworI2RlZmluZSBP UFRFRV9NU0dfTE9HSU5fUFVCTElDCQkJMHgwMDAwMDAwMAorI2RlZmluZSBPUFRFRV9NU0dfTE9H SU5fVVNFUgkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgT1BURUVfTVNHX0xPR0lOX0dST1VQCQkJMHgw MDAwMDAwMgorI2RlZmluZSBPUFRFRV9NU0dfTE9HSU5fQVBQTElDQVRJT04JCTB4MDAwMDAwMDQK KyNkZWZpbmUgT1BURUVfTVNHX0xPR0lOX0FQUExJQ0FUSU9OX1VTRVIJMHgwMDAwMDAwNQorI2Rl ZmluZSBPUFRFRV9NU0dfTE9HSU5fQVBQTElDQVRJT05fR1JPVVAJMHgwMDAwMDAwNgorCisvKioK KyAqIHN0cnVjdCBvcHRlZV9tc2dfcGFyYW1fdG1lbSAtIHRlbXBvcmFyeSBtZW1vcnkgcmVmZXJl bmNlIHBhcmFtZXRlcgorICogQGJ1Zl9wdHI6CUFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgorICogQHNp emU6CVNpemUgb2YgdGhlIGJ1ZmZlcgorICogQHNobV9yZWY6CVRlbXBvcmFyeSBzaGFyZWQgbWVt b3J5IHJlZmVyZW5jZSwgcG9pbnRlciB0byBhIHN0cnVjdCB0ZWVfc2htCisgKgorICogU2VjdXJl IGFuZCBub3JtYWwgd29ybGQgY29tbXVuaWNhdGVzIHBvaW50ZXJzIGFzIHBoeXNpY2FsIGFkZHJl c3MKKyAqIGluc3RlYWQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcy4gVGhpcyBpcyBiZWNhdXNlIHNl Y3VyZSBhbmQgbm9ybWFsIHdvcmxkCisgKiBoYXZlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgbWVt b3J5IG1hcHBpbmcuIE5vcm1hbCB3b3JsZCBjYW4gZXZlbiBoYXZlIGEKKyAqIGh5cGVydmlzb3Ig d2hpY2ggbmVlZCB0byB0cmFuc2xhdGUgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEFLQSBJ UEEKKyAqIGluIEFSTSBkb2N1bWVudGF0aW9uKSB0byBhIHJlYWwgcGh5c2ljYWwgYWRkcmVzcyBi ZWZvcmUgcGFzc2luZyB0aGUKKyAqIHN0cnVjdHVyZSB0byBzZWN1cmUgd29ybGQuCisgKi8KK3N0 cnVjdCBvcHRlZV9tc2dfcGFyYW1fdG1lbSB7CisJdTY0IGJ1Zl9wdHI7CisJdTY0IHNpemU7CisJ dTY0IHNobV9yZWY7Cit9OworCisvKioKKyAqIHN0cnVjdCBvcHRlZV9tc2dfcGFyYW1fcm1lbSAt IHJlZ2lzdGVyZWQgbWVtb3J5IHJlZmVyZW5jZSBwYXJhbWV0ZXIKKyAqIEBvZmZzOglPZmZzZXQg aW50byBzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZQorICogQHNpemU6CVNpemUgb2YgdGhlIGJ1ZmZl cgorICogQHNobV9yZWY6CVNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlLCBwb2ludGVyIHRvIGEgc3Ry dWN0IHRlZV9zaG0KKyAqLworc3RydWN0IG9wdGVlX21zZ19wYXJhbV9ybWVtIHsKKwl1NjQgb2Zm czsKKwl1NjQgc2l6ZTsKKwl1NjQgc2htX3JlZjsKK307CisKKy8qKgorICogc3RydWN0IG9wdGVl X21zZ19wYXJhbV92YWx1ZSAtIG9wYXF1ZSB2YWx1ZSBwYXJhbWV0ZXIKKyAqCisgKiBWYWx1ZSBw YXJhbWV0ZXJzIGFyZSBwYXNzZWQgdW5jaGVja2VkIGJldHdlZW4gbm9ybWFsIGFuZCBzZWN1cmUg d29ybGQuCisgKi8KK3N0cnVjdCBvcHRlZV9tc2dfcGFyYW1fdmFsdWUgeworCXU2NCBhOworCXU2 NCBiOworCXU2NCBjOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtIC0gcGFy YW1ldGVyIHVzZWQgdG9nZXRoZXIgd2l0aCBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICogQGF0dHI6 CWF0dHJpYnV0ZXMKKyAqIEB0bWVtOglwYXJhbWV0ZXIgYnkgdGVtcG9yYXJ5IG1lbW9yeSByZWZl cmVuY2UKKyAqIEBybWVtOglwYXJhbWV0ZXIgYnkgcmVnaXN0ZXJlZCBtZW1vcnkgcmVmZXJlbmNl CisgKiBAdmFsdWU6CXBhcmFtZXRlciBieSBvcGFxdWUgdmFsdWUKKyAqCisgKiBAYXR0ciAmIE9Q VEVFX01TR19BVFRSX1RZUEVfTUFTSyBpbmRpY2F0ZXMgaWYgdG1lbSwgcm1lbSBvciB2YWx1ZSBp cyB1c2VkIGluCisgKiB0aGUgdW5pb24uIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfKiBpbmRp Y2F0ZXMgdmFsdWUsCisgKiBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fKiBpbmRpY2F0ZXMgdG1l bSBhbmQKKyAqIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV8qIGluZGljYXRlcyBybWVtLgorICog T1BURUVfTVNHX0FUVFJfVFlQRV9OT05FIGluZGljYXRlcyB0aGF0IG5vbmUgb2YgdGhlIG1lbWJl cnMgYXJlIHVzZWQuCisgKi8KK3N0cnVjdCBvcHRlZV9tc2dfcGFyYW0geworCXU2NCBhdHRyOwor CXVuaW9uIHsKKwkJc3RydWN0IG9wdGVlX21zZ19wYXJhbV90bWVtIHRtZW07CisJCXN0cnVjdCBv cHRlZV9tc2dfcGFyYW1fcm1lbSBybWVtOworCQlzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtX3ZhbHVl IHZhbHVlOworCX0gdTsKK307CisKKy8qKgorICogc3RydWN0IG9wdGVlX21zZ19hcmcgLSBjYWxs IGFyZ3VtZW50CisgKiBAY21kOiBDb21tYW5kLCBvbmUgb2YgT1BURUVfTVNHX0NNRF8qIG9yIE9Q VEVFX01TR19SUENfQ01EXyoKKyAqIEBmdW5jOiBUcnVzdGVkIEFwcGxpY2F0aW9uIGZ1bmN0aW9u LCBzcGVjaWZpYyB0byB0aGUgVHJ1c3RlZCBBcHBsaWNhdGlvbiwKKyAqCSAgICAgdXNlZCBpZiBj bWQgPT0gT1BURUVfTVNHX0NNRF9JTlZPS0VfQ09NTUFORAorICogQHNlc3Npb246IEluIHBhcmFt ZXRlciBmb3IgYWxsIE9QVEVFX01TR19DTURfKiBleGNlcHQKKyAqCSAgICAgT1BURUVfTVNHX0NN RF9PUEVOX1NFU1NJT04gd2hlcmUgaXQncyBhbiBvdXRwdXQgcGFyYW1ldGVyIGluc3RlYWQKKyAq IEBjYW5jZWxfaWQ6IENhbmNlbGxhdGlvbiBpZCwgYSB1bmlxdWUgdmFsdWUgdG8gaWRlbnRpZnkg dGhpcyByZXF1ZXN0CisgKiBAcmV0OiByZXR1cm4gdmFsdWUKKyAqIEByZXRfb3JpZ2luOiBvcmln aW4gb2YgdGhlIHJldHVybiB2YWx1ZQorICogQG51bV9wYXJhbXM6IG51bWJlciBvZiBwYXJhbWV0 ZXJzIHN1cHBsaWVkIHRvIHRoZSBPUyBDb21tYW5kCisgKiBAcGFyYW1zOiB0aGUgcGFyYW1ldGVy cyBzdXBwbGllZCB0byB0aGUgT1MgQ29tbWFuZAorICoKKyAqIEFsbCBub3JtYWwgY2FsbHMgdG8g VHJ1c3RlZCBPUyB1c2VzIHRoaXMgc3RydWN0LiBJZiBjbWQgcmVxdWlyZXMgZnVydGhlcgorICog aW5mb3JtYXRpb24gdGhhbiB3aGF0IHRoZXNlIGZpZWxkIGhvbGRzIGl0IGNhbiBiZSBwYXNzZWQg YXMgYSBwYXJhbWV0ZXIKKyAqIHRhZ2dlZCBhcyBtZXRhIChzZXR0aW5nIHRoZSBPUFRFRV9NU0df QVRUUl9NRVRBIGJpdCBpbiBjb3JyZXNwb25kaW5nCisgKiBhdHRycyBmaWVsZCkuIEFsbCBwYXJh bWV0ZXJzIHRhZ2dlZCBhcyBtZXRhIGhhcyB0byBjb21lIGZpcnN0LgorICoKKyAqIFRlbXAgbWVt cmVmIHBhcmFtZXRlcnMgY2FuIGJlIGZyYWdtZW50ZWQgaWYgc3VwcG9ydGVkIGJ5IHRoZSBUcnVz dGVkIE9TCisgKiAod2hlbiBvcHRlZV9zbWMuaCBpcyBiZWFyZXIgb2YgdGhpcyBwcm90b2NvbCB0 aGlzIGlzIGluZGljYXRlZCB3aXRoCisgKiBPUFRFRV9TTUNfU0VDX0NBUF9VTlJFR0lTVEVSRURf U0hNKS4gSWYgYSBsb2dpY2FsIG1lbXJlZiBwYXJhbWV0ZXIgaXMKKyAqIGZyYWdtZW50ZWQgdGhl biBoYXMgYWxsIGJ1dCB0aGUgbGFzdCBmcmFnbWVudCB0aGUKKyAqIE9QVEVFX01TR19BVFRSX0ZS QUdNRU5UIGJpdCBzZXQgaW4gYXR0cnMuIEV2ZW4gaWYgYSBtZW1yZWYgaXMgZnJhZ21lbnRlZAor ICogaXQgd2lsbCBzdGlsbCBiZSBwcmVzZW50ZWQgYXMgYSBzaW5nbGUgbG9naWNhbCBtZW1yZWYg dG8gdGhlIFRydXN0ZWQKKyAqIEFwcGxpY2F0aW9uLgorICovCitzdHJ1Y3Qgb3B0ZWVfbXNnX2Fy ZyB7CisJdTMyIGNtZDsKKwl1MzIgZnVuYzsKKwl1MzIgc2Vzc2lvbjsKKwl1MzIgY2FuY2VsX2lk OworCXUzMiBwYWQ7CisJdTMyIHJldDsKKwl1MzIgcmV0X29yaWdpbjsKKwl1MzIgbnVtX3BhcmFt czsKKworCS8qIG51bV9wYXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudCBp biBwYXJhbXMgKi8KKwlzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtIHBhcmFtc1swXTsKK307CisKKy8q KgorICogT1BURUVfTVNHX0dFVF9BUkdfU0laRSAtIHJldHVybiBzaXplIG9mIHN0cnVjdCBvcHRl ZV9tc2dfYXJnCisgKgorICogQG51bV9wYXJhbXM6IE51bWJlciBvZiBwYXJhbWV0ZXJzIGVtYmVk ZGVkIGluIHRoZSBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICoKKyAqIFJldHVybnMgdGhlIHNpemUg b2YgdGhlIHN0cnVjdCBvcHRlZV9tc2dfYXJnIHRvZ2V0aGVyIHdpdGggdGhlIG51bWJlcgorICog b2YgZW1iZWRkZWQgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBPUFRFRV9NU0dfR0VUX0FSR19T SVpFKG51bV9wYXJhbXMpIFwKKwkoc2l6ZW9mKHN0cnVjdCBvcHRlZV9tc2dfYXJnKSArIFwKKwkg c2l6ZW9mKHN0cnVjdCBvcHRlZV9tc2dfcGFyYW0pICogKG51bV9wYXJhbXMpKQorCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIFBhcnQgMiAtIHJlcXVlc3RzIGZyb20gbm9ybWFsIHdvcmxkCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBSZXR1cm4gdGhlIGZvbGxvd2luZyBVSUQg aWYgdXNpbmcgQVBJIHNwZWNpZmllZCBpbiB0aGlzIGZpbGUgd2l0aG91dAorICogZnVydGhlciBl eHRlbnNpb25zOgorICogMzg0ZmIzZTAtZTdmOC0xMWUzLWFmNjMtMDAwMmE1ZDVjNTFiLgorICog UmVwcmVzZW50ZWQgaW4gNCAzMi1iaXQgd29yZHMgaW4gT1BURUVfTVNHX1VJRF8wLCBPUFRFRV9N U0dfVUlEXzEsCisgKiBPUFRFRV9NU0dfVUlEXzIsIE9QVEVFX01TR19VSURfMy4KKyAqLworI2Rl ZmluZSBPUFRFRV9NU0dfVUlEXzAJCQkweDM4NGZiM2UwCisjZGVmaW5lIE9QVEVFX01TR19VSURf MQkJCTB4ZTdmODExZTMKKyNkZWZpbmUgT1BURUVfTVNHX1VJRF8yCQkJMHhhZjYzMDAwMgorI2Rl ZmluZSBPUFRFRV9NU0dfVUlEXzMJCQkweGE1ZDVjNTFiCisjZGVmaW5lIE9QVEVFX01TR19GVU5D SURfQ0FMTFNfVUlECTB4RkYwMQorCisvKgorICogUmV0dXJucyAyLjAgaWYgdXNpbmcgQVBJIHNw ZWNpZmllZCBpbiB0aGlzIGZpbGUgd2l0aG91dCBmdXJ0aGVyCisgKiBleHRlbnNpb25zLiBSZXBy ZXNlbnRlZCBpbiAyIDMyLWJpdCB3b3JkcyBpbiBPUFRFRV9NU0dfUkVWSVNJT05fTUFKT1IKKyAq IGFuZCBPUFRFRV9NU0dfUkVWSVNJT05fTUlOT1IKKyAqLworI2RlZmluZSBPUFRFRV9NU0dfUkVW SVNJT05fTUFKT1IJMgorI2RlZmluZSBPUFRFRV9NU0dfUkVWSVNJT05fTUlOT1IJMAorI2RlZmlu ZSBPUFRFRV9NU0dfRlVOQ0lEX0NBTExTX1JFVklTSU9OCTB4RkYwMworCisvKgorICogR2V0IFVV SUQgb2YgVHJ1c3RlZCBPUy4KKyAqCisgKiBVc2VkIGJ5IG5vbi1zZWN1cmUgd29ybGQgdG8gZmln dXJlIG91dCB3aGljaCBUcnVzdGVkIE9TIGlzIGluc3RhbGxlZC4KKyAqIE5vdGUgdGhhdCByZXR1 cm5lZCBVVUlEIGlzIHRoZSBVVUlEIG9mIHRoZSBUcnVzdGVkIE9TLCBub3Qgb2YgdGhlIEFQSS4K KyAqCisgKiBSZXR1cm5zIFVVSUQgaW4gNCAzMi1iaXQgd29yZHMgaW4gdGhlIHNhbWUgd2F5IGFz CisgKiBPUFRFRV9NU0dfRlVOQ0lEX0NBTExTX1VJRCBkZXNjcmliZWQgYWJvdmUuCisgKi8KKyNk ZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VVSURfMAkweDQ4NjE3OGUwCisjZGVmaW5lIE9QVEVF X01TR19PU19PUFRFRV9VVUlEXzEJMHhlN2Y4MTFlMworI2RlZmluZSBPUFRFRV9NU0dfT1NfT1BU RUVfVVVJRF8yCTB4YmM1ZTAwMDIKKyNkZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VVSURfMwkw eGE1ZDVjNTFiCisjZGVmaW5lIE9QVEVFX01TR19GVU5DSURfR0VUX09TX1VVSUQJMHgwMDAwCisK Ky8qCisgKiBHZXQgcmV2aXNpb24gb2YgVHJ1c3RlZCBPUy4KKyAqCisgKiBVc2VkIGJ5IG5vbi1z ZWN1cmUgd29ybGQgdG8gZmlndXJlIG91dCB3aGljaCB2ZXJzaW9uIG9mIHRoZSBUcnVzdGVkIE9T CisgKiBpcyBpbnN0YWxsZWQuIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgcmV2aXNpb24gaXMgdGhl IHJldmlzaW9uIG9mIHRoZQorICogVHJ1c3RlZCBPUywgbm90IG9mIHRoZSBBUEkuCisgKgorICog UmV0dXJucyByZXZpc2lvbiBpbiAyIDMyLWJpdCB3b3JkcyBpbiB0aGUgc2FtZSB3YXkgYXMKKyAq IE9QVEVFX01TR19DQUxMU19SRVZJU0lPTiBkZXNjcmliZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUg T1BURUVfTVNHX0ZVTkNJRF9HRVRfT1NfUkVWSVNJT04JMHgwMDAxCisKKy8qCisgKiBEbyBhIHNl Y3VyZSBjYWxsIHdpdGggc3RydWN0IG9wdGVlX21zZ19hcmcgYXMgYXJndW1lbnQKKyAqIFRoZSBP UFRFRV9NU0dfQ01EXyogYmVsb3cgZGVmaW5lcyB3aGF0IGdvZXMgaW4gc3RydWN0IG9wdGVlX21z Z19hcmc6OmNtZAorICoKKyAqIE9QVEVFX01TR19DTURfT1BFTl9TRVNTSU9OIG9wZW5zIGEgc2Vz c2lvbiB0byBhIFRydXN0ZWQgQXBwbGljYXRpb24uCisgKiBUaGUgZmlyc3QgdHdvIHBhcmFtZXRl cnMgYXJlIHRhZ2dlZCBhcyBtZXRhLCBob2xkaW5nIHR3byB2YWx1ZQorICogcGFyYW1ldGVycyB0 byBwYXNzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisgKiBwYXJhbVswXS51LnZhbHVlLmEt YiB1dWlkIG9mIFRydXN0ZWQgQXBwbGljYXRpb24KKyAqIHBhcmFtWzFdLnUudmFsdWUuYS1iIHV1 aWQgb2YgQ2xpZW50CisgKiBwYXJhbVsxXS51LnZhbHVlLmMgTG9naW4gY2xhc3Mgb2YgY2xpZW50 IE9QVEVFX01TR19MT0dJTl8qCisgKgorICogT1BURUVfTVNHX0NNRF9JTlZPS0VfQ09NTUFORCBp bnZva2VzIGEgY29tbWFuZCBhIHByZXZpb3VzbHkgb3BlbmVkCisgKiBzZXNzaW9uIHRvIGEgVHJ1 c3RlZCBBcHBsaWNhdGlvbi4gIHN0cnVjdCBvcHRlZV9tc2dfYXJnOjpmdW5jIGlzIFRydXN0ZWQK KyAqIEFwcGxpY2F0aW9uIGZ1bmN0aW9uLCBzcGVjaWZpYyB0byB0aGUgVHJ1c3RlZCBBcHBsaWNh dGlvbi4KKyAqCisgKiBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT04gY2xvc2VzIGEgcHJldmlv dXNseSBvcGVuZWQgc2Vzc2lvbiB0bworICogVHJ1c3RlZCBBcHBsaWNhdGlvbi4KKyAqCisgKiBP UFRFRV9NU0dfQ01EX0NBTkNFTCBjYW5jZWxzIGEgY3VycmVudGx5IGludm9rZWQgY29tbWFuZC4K KyAqCisgKiBPUFRFRV9NU0dfQ01EX1JFR0lTVEVSX1NITSByZWdpc3RlcnMgYSBzaGFyZWQgbWVt b3J5IHJlZmVyZW5jZS4gVGhlCisgKiBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgYXM6CisgKiBbaW5d IHBhcmFtWzBdLmF0dHIJCQlPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQKKyAqCQkJCQlb fCBPUFRFRV9NU0dfQVRUUl9GUkFHTUVOVF0KKyAqIFtpbl0gcGFyYW1bMF0udS50bWVtLmJ1Zl9w dHIJCXBoeXNpY2FsIGFkZHJlc3MgKG9mIGZpcnN0IGZyYWdtZW50KQorICogW2luXSBwYXJhbVsw XS51LnRtZW0uc2l6ZQkJc2l6ZSAob2YgZmlyc3QgZnJhZ21lbnQpCisgKiBbaW5dIHBhcmFtWzBd LnUudG1lbS5zaG1fcmVmCQlob2xkcyBzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZQorICogLi4uCisg KiBUaGUgc2hhcmVkIG1lbW9yeSBjYW4gb3B0aW9uYWxseSBiZSBmcmFnbWVudGVkLCB0ZW1wIG1l bXJlZnMgY2FuIGZvbGxvdworICogZWFjaCBvdGhlciB3aXRoIGFsbCBidXQgdGhlIGxhc3Qgd2l0 aCB0aGUgT1BURUVfTVNHX0FUVFJfRlJBR01FTlQgYml0IHNldC4KKyAqCisgKiBPUFRFRV9NU0df Q01EX1VOUkVHSVNURVJfU0hNIHVucmVnaXN0ZXJlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBz aGFyZWQKKyAqIG1lbW9yeSByZWZlcmVuY2UuIFRoZSBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgYXM6 CisgKiBbaW5dIHBhcmFtWzBdLmF0dHIJCQlPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5QVVQK KyAqIFtpbl0gcGFyYW1bMF0udS5ybWVtLnNobV9yZWYJCWhvbGRzIHNoYXJlZCBtZW1vcnkgcmVm ZXJlbmNlCisgKiBbaW5dIHBhcmFtWzBdLnUucm1lbS5vZmZzCQkwCisgKiBbaW5dIHBhcmFtWzBd LnUucm1lbS5zaXplCQkwCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX0NNRF9PUEVOX1NFU1NJT04J MAorI2RlZmluZSBPUFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5ECTEKKyNkZWZpbmUgT1BURUVf TVNHX0NNRF9DTE9TRV9TRVNTSU9OCTIKKyNkZWZpbmUgT1BURUVfTVNHX0NNRF9DQU5DRUwJCTMK KyNkZWZpbmUgT1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE0JNAorI2RlZmluZSBPUFRFRV9NU0df Q01EX1VOUkVHSVNURVJfU0hNCTUKKyNkZWZpbmUgT1BURUVfTVNHX0ZVTkNJRF9DQUxMX1dJVEhf QVJHCTB4MDAwNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBhcnQgMyAtIFJlcXVlc3Rz IGZyb20gc2VjdXJlIHdvcmxkLCBSUEMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAq IEFsbCBSUEMgaXMgZG9uZSB3aXRoIGEgc3RydWN0IG9wdGVlX21zZ19hcmcgYXMgYmVhcmVyIG9m IGluZm9ybWF0aW9uLAorICogc3RydWN0IG9wdGVlX21zZ19hcmc6OmFyZyBob2xkcyB2YWx1ZXMg ZGVmaW5lZCBieSBPUFRFRV9NU0dfUlBDX0NNRF8qIGJlbG93CisgKgorICogUlBDIGNvbW11bmlj YXRpb24gd2l0aCB0ZWUtc3VwcGxpY2FudCBpcyByZXZlcnNlZCBjb21wYXJlZCB0byBub3JtYWwK KyAqIGNsaWVudCBjb21tdW5pY2F0aW9uIGRlc3JpYmVkIGFib3ZlLiBUaGUgc3VwcGxpY2FudCBy ZWNlaXZlcyByZXF1ZXN0cworICogYW5kIHNlbmRzIHJlc3BvbnNlcy4KKyAqLworCisvKgorICog TG9hZCBhIFRBIGludG8gbWVtb3J5LCBkZWZpbmVkIGluIHRlZS1zdXBwbGljYW50CisgKi8KKyNk ZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfTE9BRF9UQQkwCisKKy8qCisgKiBSZXNlcnZlZAorICov CisjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX1JQTUIJCTEKKworLyoKKyAqIEZpbGUgc3lzdGVt IGFjY2VzcywgZGVmaW5lZCBpbiB0ZWUtc3VwcGxpY2FudAorICovCisjZGVmaW5lIE9QVEVFX01T R19SUENfQ01EX0ZTCQkyCisKKy8qCisgKiBHZXQgdGltZQorICoKKyAqIFJldHVybnMgbnVtYmVy IG9mIHNlY29uZHMgYW5kIG5hbm8gc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2gsCisgKiAxOTcwLTAx LTAxIDAwOjAwOjAwICswMDAwIChVVEMpLgorICoKKyAqIFtvdXRdIHBhcmFtWzBdLnUudmFsdWUu YQlOdW1iZXIgb2Ygc2Vjb25kcworICogW291dF0gcGFyYW1bMF0udS52YWx1ZS5iCU51bWJlciBv ZiBuYW5vIHNlY29uZHMuCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfR0VUX1RJTUUJ MworCisvKgorICogV2FpdCBxdWV1ZSBwcmltaXRpdmUsIGhlbHBlciBmb3Igc2VjdXJlIHdvcmxk IHRvIGltcGxlbWVudCBhIHdhaXQgcXVldWUuCisgKgorICogSWYgc2VjdXJlIHdvcmxkIG5lZWQg dG8gd2FpdCBmb3IgYSBzZWN1cmUgd29ybGQgbXV0ZXggaXQgaXNzdWVzIGEgc2xlZXAKKyAqIHJl cXVlc3QgaW5zdGVhZCBvZiBzcGlubmluZyBpbiBzZWN1cmUgd29ybGQuIENvbnZlcnNlbHkgaXMg YSB3YWtldXAKKyAqIHJlcXVlc3QgaXNzdWVkIHdoZW4gYSBzZWN1cmUgd29ybGQgbXV0ZXggd2l0 aCBhIHRocmVhZCB3YWl0aW5nIHRocmVhZCBpcworICogdW5sb2NrZWQuCisgKgorICogV2FpdGlu ZyBvbiBhIGtleQorICogW2luXSBwYXJhbVswXS51LnZhbHVlLmEgT1BURUVfTVNHX1JQQ19XQUlU X1FVRVVFX1NMRUVQCisgKiBbaW5dIHBhcmFtWzBdLnUudmFsdWUuYiB3YWl0IGtleQorICoKKyAq IFdha2luZyB1cCBhIGtleQorICogW2luXSBwYXJhbVswXS51LnZhbHVlLmEgT1BURUVfTVNHX1JQ Q19XQUlUX1FVRVVFX1dBS0VVUAorICogW2luXSBwYXJhbVswXS51LnZhbHVlLmIgd2FrZXVwIGtl eQorICovCisjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX1dBSVRfUVVFVUUJNAorI2RlZmluZSBP UFRFRV9NU0dfUlBDX1dBSVRfUVVFVUVfU0xFRVAJMAorI2RlZmluZSBPUFRFRV9NU0dfUlBDX1dB SVRfUVVFVUVfV0FLRVVQCTEKKworLyoKKyAqIFN1c3BlbmQgZXhlY3V0aW9uCisgKgorICogW2lu XSBwYXJhbVswXS52YWx1ZQkuYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHN1c3BlbmQKKyAq LworI2RlZmluZSBPUFRFRV9NU0dfUlBDX0NNRF9TVVNQRU5ECTUKKworLyoKKyAqIEFsbG9jYXRl IGEgcGllY2Ugb2Ygc2hhcmVkIG1lbW9yeQorICoKKyAqIFNoYXJlZCBtZW1vcnkgY2FuIG9wdGlv bmFsbHkgYmUgZnJhZ21lbnRlZCwgdG8gc3VwcG9ydCB0aGF0IGFkZGl0aW9uYWwKKyAqIHNwYXJl IHBhcmFtIGVudHJpZXMgYXJlIGFsbG9jYXRlZCB0byBtYWtlIHJvb20gZm9yIGV2ZW50dWFsIGZy YWdtZW50cy4KKyAqIFRoZSBzcGFyZSBwYXJhbSBlbnRyaWVzIGhhcyAuYXR0ciA9IE9QVEVFX01T R19BVFRSX1RZUEVfTk9ORSB3aGVuCisgKiB1bnVzZWQuIEFsbCByZXR1cm5lZCB0ZW1wIG1lbXJl ZnMgZXhjZXB0IHRoZSBsYXN0IHNob3VsZCBoYXZlIHRoZQorICogT1BURUVfTVNHX0FUVFJfRlJB R01FTlQgYml0IHNldCBpbiB0aGUgYXR0ciBmaWVsZC4KKyAqCisgKiBbaW5dICBwYXJhbVswXS51 LnZhbHVlLmEJCXR5cGUgb2YgbWVtb3J5IG9uZSBvZgorICoJCQkJCU9QVEVFX01TR19SUENfU0hN X1RZUEVfKiBiZWxvdworICogW2luXSAgcGFyYW1bMF0udS52YWx1ZS5iCQlyZXF1ZXN0ZWQgc2l6 ZQorICogW2luXSAgcGFyYW1bMF0udS52YWx1ZS5jCQlyZXF1aXJlZCBhbGlnbm1lbnQKKyAqCisg KiBbb3V0XSBwYXJhbVswXS51LnRtZW0uYnVmX3B0cglwaHlzaWNhbCBhZGRyZXNzIChvZiBmaXJz dCBmcmFnbWVudCkKKyAqIFtvdXRdIHBhcmFtWzBdLnUudG1lbS5zaXplCQlzaXplIChvZiBmaXJz dCBmcmFnbWVudCkKKyAqIFtvdXRdIHBhcmFtWzBdLnUudG1lbS5zaG1fcmVmCXNoYXJlZCBtZW1v cnkgcmVmZXJlbmNlCisgKiAuLi4KKyAqIFtvdXRdIHBhcmFtW25dLnUudG1lbS5idWZfcHRyCXBo eXNpY2FsIGFkZHJlc3MKKyAqIFtvdXRdIHBhcmFtW25dLnUudG1lbS5zaXplCQlzaXplCisgKiBb b3V0XSBwYXJhbVtuXS51LnRtZW0uc2htX3JlZglzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZSAoc2Ft ZSB2YWx1ZQorICoJCQkJCWFzIGluIHBhcmFtW24tMV0udS50bWVtLnNobV9yZWYpCisgKi8KKyNk ZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfU0hNX0FMTE9DCTYKKy8qIE1lbW9yeSB0aGF0IGNhbiBi ZSBzaGFyZWQgd2l0aCBhIG5vbi1zZWN1cmUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiAqLworI2Rl ZmluZSBPUFRFRV9NU0dfUlBDX1NITV9UWVBFX0FQUEwJMAorLyogTWVtb3J5IG9ubHkgc2hhcmVk IHdpdGggbm9uLXNlY3VyZSBrZXJuZWwgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19TSE1fVFlQ RV9LRVJORUwJMQorCisvKgorICogRnJlZSBzaGFyZWQgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2Nh dGVkIHdpdGggT1BURUVfTVNHX1JQQ19DTURfU0hNX0FMTE9DCisgKgorICogW2luXSAgcGFyYW1b MF0udS52YWx1ZS5hCQl0eXBlIG9mIG1lbW9yeSBvbmUgb2YKKyAqCQkJCQlPUFRFRV9NU0dfUlBD X1NITV9UWVBFXyogYWJvdmUKKyAqIFtpbl0gIHBhcmFtWzBdLnUudmFsdWUuYgkJdmFsdWUgb2Yg c2hhcmVkIG1lbW9yeSByZWZlcmVuY2UKKyAqCQkJCQlyZXR1cm5lZCBpbiBwYXJhbVswXS51LnRt ZW0uc2htX3JlZgorICoJCQkJCWFib3ZlCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURf U0hNX0ZSRUUJNworCisjZW5kaWYgLyogX09QVEVFX01TR19IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRlLmggYi9kcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9w cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMzc0Y2Q1 OTQzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRl LmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBM aW1pdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3Bp ZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBPUFRFRV9QUklWQVRFX0gKKyNk ZWZpbmUgT1BURUVfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KKyNp bmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC90ZWVfZHJ2Lmg+Cisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJvcHRlZV9tc2cuaCIKKworI2RlZmlu ZSBPUFRFRV9NQVhfQVJHX1NJWkUJMTAyNAorCisvKiBTb21lIEdsb2JhbCBQbGF0Zm9ybSBlcnJv ciBjb2RlcyB1c2VkIGluIHRoaXMgZHJpdmVyICovCisjZGVmaW5lIFRFRUNfU1VDQ0VTUwkJCTB4 MDAwMDAwMDAKKyNkZWZpbmUgVEVFQ19FUlJPUl9CQURfUEFSQU1FVEVSUwkweEZGRkYwMDA2Cisj ZGVmaW5lIFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTgkweEZGRkYwMDBFCisjZGVmaW5lIFRFRUNf RVJST1JfT1VUX09GX01FTU9SWQkweEZGRkYwMDBDCisKKyNkZWZpbmUgVEVFQ19PUklHSU5fQ09N TVMJCTB4MDAwMDAwMDIKKwordHlwZWRlZiB2b2lkIChvcHRlZV9pbnZva2VfZm4pKHVuc2lnbmVk IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJdW5zaWduZWQgbG9uZywg dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25l ZCBsb25nLAorCQkJCXN0cnVjdCBhcm1fc21jY2NfcmVzICopOworCitzdHJ1Y3Qgb3B0ZWVfY2Fs bF9xdWV1ZSB7CisJLyogU2VyaWFsaXplcyBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8KKwlzdHJ1 Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGxpc3RfaGVhZCB3YWl0ZXJzOworfTsKKworc3RydWN0 IG9wdGVlX3dhaXRfcXVldWUgeworCS8qIFNlcmlhbGl6ZXMgYWNjZXNzIHRvIHRoaXMgc3RydWN0 ICovCisJc3RydWN0IG11dGV4IG11OworCXN0cnVjdCBsaXN0X2hlYWQgZGI7Cit9OworCisvKioK KyAqIHN0cnVjdCBvcHRlZV9zdXBwIC0gc3VwcGxpY2FudCBzeW5jaHJvbml6YXRpb24gc3RydWN0 CisgKiBAY3R4CQkJdGhlIGNvbnRleHQgb2YgY3VycmVudCBjb25uZWN0ZWQgc3VwcGxpY2FudC4K KyAqCQkJaWYgIU5VTEwgdGhlIHN1cHBsaWNhbnQgZGV2aWNlIGlzIGF2YWlsYWJsZSBmb3IgdXNl LAorICoJCQllbHNlIGJ1c3kKKyAqIEBjdHhfbXV0ZXg6CQloZWxkIHdoaWxlIGFjY2Vzc2luZyBA Y3R4CisgKiBAZnVuYzoJCXN1cHBsaWNhbnQgZnVuY3Rpb24gaWQgdG8gY2FsbAorICogQHJldDoJ CWNhbGwgcmV0dXJuIHZhbHVlCisgKiBAbnVtX3BhcmFtczoJCW51bWJlciBvZiBlbGVtZW50cyBp biBAcGFyYW0KKyAqIEBwYXJhbToJCXBhcmFtZXRlcnMgZm9yIEBmdW5jCisgKiBAcmVxX3Bvc3Rl ZDoJCWlmIHRydWUsIGEgcmVxdWVzdCBoYXMgYmVlbiBwb3N0ZWQgdG8gdGhlIHN1cHBsaWNhbnQK KyAqIEBzdXBwX25leHRfc2VuZDoJaWYgdHJ1ZSwgbmV4dCBzdGVwIGlzIGZvciBzdXBwbGljYW50 IHRvIHNlbmQgcmVzcG9uc2UKKyAqIEB0aHJkX211dGV4OgkJaGVsZCBieSB0aGUgdGhyZWFkIGRv aW5nIGEgcmVxdWVzdCB0byBzdXBwbGljYW50CisgKiBAc3VwcF9tdXRleDoJCWhlbGQgYnkgc3Vw cGxpY2FudCB3aGlsZSBvcGVyYXRpbmcgb24gdGhpcyBzdHJ1Y3QKKyAqIEBkYXRhX3RvX3N1cHA6 CXN1cHBsaWNhbnQgaXMgd2FpdGluZyBvbiB0aGlzIGZvciBuZXh0IHJlcXVlc3QKKyAqIEBkYXRh X2Zyb21fc3VwcDoJcmVxdWVzdGluZyB0aHJlYWQgaXMgd2FpdGluZyBvbiB0aGlzIHRvIGdldCB0 aGUgcmVzdWx0CisgKi8KK3N0cnVjdCBvcHRlZV9zdXBwIHsKKwlzdHJ1Y3QgdGVlX2NvbnRleHQg KmN0eDsKKwkvKiBTZXJpYWxpemVzIGFjY2VzcyBvZiBjdHggKi8KKwlzdHJ1Y3QgbXV0ZXggY3R4 X211dGV4OworCisJdTMyIGZ1bmM7CisJdTMyIHJldDsKKwlzaXplX3QgbnVtX3BhcmFtczsKKwlz dHJ1Y3QgdGVlX3BhcmFtICpwYXJhbTsKKworCWJvb2wgcmVxX3Bvc3RlZDsKKwlib29sIHN1cHBf bmV4dF9zZW5kOworCS8qIFNlcmlhbGl6ZXMgYWNjZXNzIHRvIHRoaXMgc3RydWN0IGZvciByZXF1 ZXN0aW5nIHRocmVhZCAqLworCXN0cnVjdCBtdXRleCB0aHJkX211dGV4OworCS8qIFNlcmlhbGl6 ZXMgYWNjZXNzIHRvIHRoaXMgc3RydWN0IGZvciBzdXBwbGljYW50IHRocmVhZHMgKi8KKwlzdHJ1 Y3QgbXV0ZXggc3VwcF9tdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkYXRhX3RvX3N1cHA7CisJ c3RydWN0IGNvbXBsZXRpb24gZGF0YV9mcm9tX3N1cHA7Cit9OworCisvKioKKyAqIHN0cnVjdCBv cHRlZSAtIG1haW4gc2VydmljZSBzdHJ1Y3QKKyAqIEBzdXBwX3RlZWRldjoJc3VwcGxpY2FudCBk ZXZpY2UKKyAqIEB0ZWVkZXY6CQljbGllbnQgZGV2aWNlCisgKiBAaW52b2tlX2ZuOgkJZnVuY3Rp b24gdG8gaXNzdWUgc21jIG9yIGh2YworICogQGNhbGxfcXVldWU6CQlxdWV1ZSBvZiB0aHJlYWRz IHdhaXRpbmcgdG8gY2FsbCBAaW52b2tlX2ZuCisgKiBAd2FpdF9xdWV1ZToJCXF1ZXVlIG9mIHRo cmVhZHMgZnJvbSBzZWN1cmUgd29ybGQgd2FpdGluZyBmb3IgYQorICoJCQlzZWN1cmUgd29ybGQg c3luYyBvYmplY3QKKyAqIEBzdXBwOgkJc3VwcGxpY2FudCBzeW5jaHJvbml6YXRpb24gc3RydWN0 IGZvciBSUEMgdG8gc3VwcGxpY2FudAorICogQHBvb2w6CQlzaGFyZWQgbWVtb3J5IHBvb2wKKyAq IEBtZW1yZW1hcGVkX3NobQl2aXJ0dWFsIGFkZHJlc3Mgb2YgbWVtb3J5IGluIHNoYXJlZCBtZW1v cnkgcG9vbAorICovCitzdHJ1Y3Qgb3B0ZWUgeworCXN0cnVjdCB0ZWVfZGV2aWNlICpzdXBwX3Rl ZWRldjsKKwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2OworCW9wdGVlX2ludm9rZV9mbiAqaW52 b2tlX2ZuOworCXN0cnVjdCBvcHRlZV9jYWxsX3F1ZXVlIGNhbGxfcXVldWU7CisJc3RydWN0IG9w dGVlX3dhaXRfcXVldWUgd2FpdF9xdWV1ZTsKKwlzdHJ1Y3Qgb3B0ZWVfc3VwcCBzdXBwOworCXN0 cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2w7CisJdm9pZCAqbWVtcmVtYXBlZF9zaG07Cit9OworCitz dHJ1Y3Qgb3B0ZWVfc2Vzc2lvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJdTMy IHNlc3Npb25faWQ7Cit9OworCitzdHJ1Y3Qgb3B0ZWVfY29udGV4dF9kYXRhIHsKKwkvKiBTZXJp YWxpemVzIGFjY2VzcyB0byB0aGlzIHN0cnVjdCAqLworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlz dHJ1Y3QgbGlzdF9oZWFkIHNlc3NfbGlzdDsKK307CisKK3N0cnVjdCBvcHRlZV9ycGNfcGFyYW0g eworCXUzMglhMDsKKwl1MzIJYTE7CisJdTMyCWEyOworCXUzMglhMzsKKwl1MzIJYTQ7CisJdTMy CWE1OworCXUzMglhNjsKKwl1MzIJYTc7Cit9OworCit2b2lkIG9wdGVlX2hhbmRsZV9ycGMoc3Ry dWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCBvcHRlZV9ycGNfcGFyYW0gKnBhcmFtKTsKKwor dm9pZCBvcHRlZV93YWl0X3F1ZXVlX2luaXQoc3RydWN0IG9wdGVlX3dhaXRfcXVldWUgKndxKTsK K3ZvaWQgb3B0ZWVfd2FpdF9xdWV1ZV9leGl0KHN0cnVjdCBvcHRlZV93YWl0X3F1ZXVlICp3cSk7 CisKK3UzMiBvcHRlZV9zdXBwX3RocmRfcmVxKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIg ZnVuYywgc2l6ZV90IG51bV9wYXJhbXMsCisJCQlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7CisK K2ludCBvcHRlZV9zdXBwX3JlYWQoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHZvaWQgX191c2Vy ICpidWYsIHNpemVfdCBsZW4pOworaW50IG9wdGVlX3N1cHBfd3JpdGUoc3RydWN0IHRlZV9jb250 ZXh0ICpjdHgsIHZvaWQgX191c2VyICpidWYsIHNpemVfdCBsZW4pOwordm9pZCBvcHRlZV9zdXBw X2luaXQoc3RydWN0IG9wdGVlX3N1cHAgKnN1cHApOwordm9pZCBvcHRlZV9zdXBwX3VuaW5pdChz dHJ1Y3Qgb3B0ZWVfc3VwcCAqc3VwcCk7CisKK2ludCBvcHRlZV9zdXBwX3JlY3Yoc3RydWN0IHRl ZV9jb250ZXh0ICpjdHgsIHUzMiAqZnVuYywgdTMyICpudW1fcGFyYW1zLAorCQkgICAgc3RydWN0 IHRlZV9wYXJhbSAqcGFyYW0pOworaW50IG9wdGVlX3N1cHBfc2VuZChzdHJ1Y3QgdGVlX2NvbnRl eHQgKmN0eCwgdTMyIHJldCwgdTMyIG51bV9wYXJhbXMsCisJCSAgICBzdHJ1Y3QgdGVlX3BhcmFt ICpwYXJhbSk7CisKK3UzMiBvcHRlZV9kb19jYWxsX3dpdGhfYXJnKHN0cnVjdCB0ZWVfY29udGV4 dCAqY3R4LCBwaHlzX2FkZHJfdCBwYXJnKTsKK2ludCBvcHRlZV9vcGVuX3Nlc3Npb24oc3RydWN0 IHRlZV9jb250ZXh0ICpjdHgsCisJCSAgICAgICBzdHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lv bl9hcmcgKmFyZywKKwkJICAgICAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKTsKK2ludCBvcHRl ZV9jbG9zZV9zZXNzaW9uKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgc2Vzc2lvbik7Citp bnQgb3B0ZWVfaW52b2tlX2Z1bmMoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCB0ZWVf aW9jdGxfaW52b2tlX2FyZyAqYXJnLAorCQkgICAgICBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7 CitpbnQgb3B0ZWVfY2FuY2VsX3JlcShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIGNhbmNl bF9pZCwgdTMyIHNlc3Npb24pOworCit2b2lkIG9wdGVlX2VuYWJsZV9zaG1fY2FjaGUoc3RydWN0 IG9wdGVlICpvcHRlZSk7Cit2b2lkIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKHN0cnVjdCBvcHRl ZSAqb3B0ZWUpOworCitpbnQgb3B0ZWVfZnJvbV9tc2dfcGFyYW0oc3RydWN0IHRlZV9wYXJhbSAq cGFyYW1zLCBzaXplX3QgbnVtX3BhcmFtcywKKwkJCSBjb25zdCBzdHJ1Y3Qgb3B0ZWVfbXNnX3Bh cmFtICptc2dfcGFyYW1zKTsKK2ludCBvcHRlZV90b19tc2dfcGFyYW0oc3RydWN0IG9wdGVlX21z Z19wYXJhbSAqbXNnX3BhcmFtcywgc2l6ZV90IG51bV9wYXJhbXMsCisJCSAgICAgICBjb25zdCBz dHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpOworCisvKgorICogU21hbGwgaGVscGVycworICovCisK K3N0YXRpYyBpbmxpbmUgdm9pZCAqcmVnX3BhaXJfdG9fcHRyKHUzMiByZWcwLCB1MzIgcmVnMSkK K3sKKwlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykoKCh1NjQpcmVnMCA8PCAzMikgfCBy ZWcxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ19wYWlyX2Zyb21fNjQodTMyICpyZWcw LCB1MzIgKnJlZzEsIHU2NCB2YWwpCit7CisJKnJlZzAgPSB2YWwgPj4gMzI7CisJKnJlZzEgPSB2 YWw7Cit9CisKKyNlbmRpZiAvKk9QVEVFX1BSSVZBVEVfSCovCmRpZmYgLS1naXQgYS9kcml2ZXJz L3RlZS9vcHRlZS9vcHRlZV9zbWMuaCBiL2RyaXZlcnMvdGVlL29wdGVlL29wdGVlX3NtYy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDQ3MGQ0NTBiMTgyCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfc21jLmgKQEAgLTAsMCArMSw0 NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgTGluYXJvIExpbWl0ZWQKKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICog QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUK KyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIE9QVEVFX1NNQ19I CisjZGVmaW5lIE9QVEVFX1NNQ19ICisKKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KKyNp bmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBPUFRFRV9TTUNfU1REX0NBTExfVkFM KGZ1bmNfbnVtKSBcCisJQVJNX1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19TVERfQ0FMTCwgQVJN X1NNQ0NDX1NNQ18zMiwgXAorCQkJICAgQVJNX1NNQ0NDX09XTkVSX1RSVVNURURfT1MsIChmdW5j X251bSkpCisjZGVmaW5lIE9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKGZ1bmNfbnVtKSBcCisJQVJN X1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19GQVNUX0NBTEwsIEFSTV9TTUNDQ19TTUNfMzIsIFwK KwkJCSAgIEFSTV9TTUNDQ19PV05FUl9UUlVTVEVEX09TLCAoZnVuY19udW0pKQorCisvKgorICog RnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24uCisgKi8KKyNkZWZp bmUgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19DT1VOVAkweEZGMDAKKyNkZWZpbmUgT1BURUVfU01D X0NBTExTX0NPVU5UIFwKKwlBUk1fU01DQ0NfQ0FMTF9WQUwoT1BURUVfU01DX0ZBU1RfQ0FMTCwg U01DQ0NfU01DXzMyLCBcCisJCQkgICBTTUNDQ19PV05FUl9UUlVTVEVEX09TX0VORCwgXAorCQkJ ICAgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19DT1VOVCkKKworLyoKKyAqIE5vcm1hbCBjYWNoZWQg bWVtb3J5ICh3cml0ZS1iYWNrKSwgc2hhcmVhYmxlIGZvciBTTVAgc3lzdGVtcyBhbmQgbm90Cisg KiBzaGFyZWFibGUgZm9yIFVQIHN5c3RlbXMuCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX1NITV9D QUNIRUQJCTEKKworLyoKKyAqIGEwLi5hNyBpcyB1c2VkIGFzIHJlZ2lzdGVyIG5hbWVzIGluIHRo ZSBkZXNjcmlwdGlvbnMgYmVsb3csIG9uIGFybTMyCisgKiB0aGF0IHRyYW5zbGF0ZXMgdG8gcjAu LnI3IGFuZCBvbiBhcm02NCB0byB3MC4udzcuIEluIGJvdGggY2FzZXMgaXQncworICogMzItYml0 IHJlZ2lzdGVycy4KKyAqLworCisvKgorICogRnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxs aW5nIGNvbnZlbnRpb24KKyAqCisgKiBSZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgVUlEcyBp ZiB1c2luZyBBUEkgc3BlY2lmaWVkIGluIHRoaXMgZmlsZQorICogd2l0aG91dCBmdXJ0aGVyIGV4 dGVudGlvbnM6CisgKiA2NWNiNmI5My1hZjBjLTQ2MTctOGVkNi02NDRhOGQxMTQwZjgKKyAqIHNl ZSBhbHNvIE9QVEVFX1NNQ19VSURfKiBpbiBvcHRlZV9tc2cuaAorICovCisjZGVmaW5lIE9QVEVF X1NNQ19GVU5DSURfQ0FMTFNfVUlEIE9QVEVFX01TR19GVU5DSURfQ0FMTFNfVUlECisjZGVmaW5l IE9QVEVFX1NNQ19DQUxMU19VSUQgXAorCUFSTV9TTUNDQ19DQUxMX1ZBTChBUk1fU01DQ0NfRkFT VF9DQUxMLCBBUk1fU01DQ0NfU01DXzMyLCBcCisJCQkgICBBUk1fU01DQ0NfT1dORVJfVFJVU1RF RF9PU19FTkQsIFwKKwkJCSAgIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfVUlEKQorCisvKgorICog RnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24KKyAqCisgKiBSZXR1 cm5zIDIuMCBpZiB1c2luZyBBUEkgc3BlY2lmaWVkIGluIHRoaXMgZmlsZSB3aXRob3V0IGZ1cnRo ZXIgZXh0ZW50aW9ucy4KKyAqIHNlZSBhbHNvIE9QVEVFX01TR19SRVZJU0lPTl8qIGluIG9wdGVl X21zZy5oCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19SRVZJU0lPTiBPUFRF RV9NU0dfRlVOQ0lEX0NBTExTX1JFVklTSU9OCisjZGVmaW5lIE9QVEVFX1NNQ19DQUxMU19SRVZJ U0lPTiBcCisJQVJNX1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19GQVNUX0NBTEwsIEFSTV9TTUND Q19TTUNfMzIsIFwKKwkJCSAgIEFSTV9TTUNDQ19PV05FUl9UUlVTVEVEX09TX0VORCwgXAorCQkJ ICAgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19SRVZJU0lPTikKKworc3RydWN0IG9wdGVlX3NtY19j YWxsc19yZXZpc2lvbl9yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgbWFqb3I7CisJdW5zaWduZWQg bG9uZyBtaW5vcjsKKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkMDsKKwl1bnNpZ25lZCBsb25nIHJl c2VydmVkMTsKK307CisKKy8qCisgKiBHZXQgVVVJRCBvZiBUcnVzdGVkIE9TLgorICoKKyAqIFVz ZWQgYnkgbm9uLXNlY3VyZSB3b3JsZCB0byBmaWd1cmUgb3V0IHdoaWNoIFRydXN0ZWQgT1MgaXMg aW5zdGFsbGVkLgorICogTm90ZSB0aGF0IHJldHVybmVkIFVVSUQgaXMgdGhlIFVVSUQgb2YgdGhl IFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgorICoKKyAqIFJldHVybnMgVVVJRCBpbiBhMC00 IGluIHRoZSBzYW1lIHdheSBhcyBPUFRFRV9TTUNfQ0FMTFNfVUlECisgKiBkZXNjcmliZWQgYWJv dmUuCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9HRVRfT1NfVVVJRCBPUFRFRV9NU0df RlVOQ0lEX0dFVF9PU19VVUlECisjZGVmaW5lIE9QVEVFX1NNQ19DQUxMX0dFVF9PU19VVUlEIFwK KwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0dFVF9PU19VVUlEKQor CisvKgorICogR2V0IHJldmlzaW9uIG9mIFRydXN0ZWQgT1MuCisgKgorICogVXNlZCBieSBub24t c2VjdXJlIHdvcmxkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmVyc2lvbiBvZiB0aGUgVHJ1c3RlZCBP UworICogaXMgaW5zdGFsbGVkLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHJldmlzaW9uIGlzIHRo ZSByZXZpc2lvbiBvZiB0aGUKKyAqIFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgorICoKKyAq IFJldHVybnMgcmV2aXNpb24gaW4gYTAtMSBpbiB0aGUgc2FtZSB3YXkgYXMgT1BURUVfU01DX0NB TExTX1JFVklTSU9OCisgKiBkZXNjcmliZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgT1BURUVfU01D X0ZVTkNJRF9HRVRfT1NfUkVWSVNJT04gT1BURUVfTVNHX0ZVTkNJRF9HRVRfT1NfUkVWSVNJT04K KyNkZWZpbmUgT1BURUVfU01DX0NBTExfR0VUX09TX1JFVklTSU9OIFwKKwlPUFRFRV9TTUNfRkFT VF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0dFVF9PU19SRVZJU0lPTikKKworLyoKKyAqIENh bGwgd2l0aCBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyBhcyBhcmd1bWVudAorICoKKyAqIENhbGwgcmVn aXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQypDQUxMX1dJVEhf QVJHCisgKiBhMQlVcHBlciAzMmJpdCBvZiBhIDY0Yml0IHBoeXNpY2FsIHBvaW50ZXIgdG8gYSBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICogYTIJTG93ZXIgMzJiaXQgb2YgYSA2NGJpdCBwaHlzaWNh bCBwb2ludGVyIHRvIGEgc3RydWN0IG9wdGVlX21zZ19hcmcKKyAqIGEzCUNhY2hlIHNldHRpbmdz LCBub3QgdXNlZCBpZiBwaHlzaWNhbCBwb2ludGVyIGlzIGluIGEgcHJlZGVmaW5lZCBzaGFyZWQK KyAqCW1lbW9yeSBhcmVhIGVsc2UgcGVyIE9QVEVFX1NNQ19TSE1fKgorICogYTQtNglOb3QgdXNl ZAorICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIKKyAqCisgKiBOb3JtYWwgcmV0 dXJuIHJlZ2lzdGVyIHVzYWdlOgorICogYTAJUmV0dXJuIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJO XyoKKyAqIGExLTMJTm90IHVzZWQKKyAqIGE0LTcJUHJlc2VydmVkCisgKgorICogT1BURUVfU01D X1JFVFVSTl9FVEhSRUFEX0xJTUlUIHJldHVybiByZWdpc3RlciB1c2FnZToKKyAqIGEwCVJldHVy biB2YWx1ZSwgT1BURUVfU01DX1JFVFVSTl9FVEhSRUFEX0xJTUlUCisgKiBhMS0zCVByZXNlcnZl ZAorICogYTQtNwlQcmVzZXJ2ZWQKKyAqCisgKiBSUEMgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgor ICogYTAJUmV0dXJuIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJOX0lTX1JQQyh2YWwpCisgKiBhMS0y CVJQQyBwYXJhbWV0ZXJzCisgKiBhMy03CVJlc3VtZSBpbmZvcm1hdGlvbiwgbXVzdCBiZSBwcmVz ZXJ2ZWQKKyAqCisgKiBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgorICogT1BURUVfU01DX1JFVFVS Tl9VTktOT1dOX0ZVTkNUSU9OCVRydXN0ZWQgT1MgZG9lcyBub3QgcmVjb2duaXplIHRoaXMKKyAq CQkJCQlmdW5jdGlvbi4KKyAqIE9QVEVFX1NNQ19SRVRVUk5fT0sJCQlDYWxsIGNvbXBsZXRlZCwg cmVzdWx0IHVwZGF0ZWQgaW4KKyAqCQkJCQl0aGUgcHJldmlvdXNseSBzdXBwbGllZCBzdHJ1Y3QK KyAqCQkJCQlvcHRlZV9tc2dfYXJnLgorICogT1BURUVfU01DX1JFVFVSTl9FVEhSRUFEX0xJTUlU CU51bWJlciBvZiBUcnVzdGVkIE9TIHRocmVhZHMgZXhjZWVkZWQsCisgKgkJCQkJdHJ5IGFnYWlu IGxhdGVyLgorICogT1BURUVfU01DX1JFVFVSTl9FQkFEQUREUgkJQmFkIHBoeXNjaWFsIHBvaW50 ZXIgdG8gc3RydWN0CisgKgkJCQkJb3B0ZWVfbXNnX2FyZy4KKyAqIE9QVEVFX1NNQ19SRVRVUk5f RUJBRENNRAkJQmFkL3Vua25vd24gY21kIGluIHN0cnVjdCBvcHRlZV9tc2dfYXJnCisgKiBPUFRF RV9TTUNfUkVUVVJOX0lTX1JQQygpCQlDYWxsIHN1c3BlbmRlZCBieSBSUEMgY2FsbCB0byBub3Jt YWwKKyAqCQkJCQl3b3JsZC4KKyAqLworI2RlZmluZSBPUFRFRV9TTUNfRlVOQ0lEX0NBTExfV0lU SF9BUkcgT1BURUVfTVNHX0ZVTkNJRF9DQUxMX1dJVEhfQVJHCisjZGVmaW5lIE9QVEVFX1NNQ19D QUxMX1dJVEhfQVJHIFwKKwlPUFRFRV9TTUNfU1REX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURf Q0FMTF9XSVRIX0FSRykKKworLyoKKyAqIEdldCBTaGFyZWQgTWVtb3J5IENvbmZpZworICoKKyAq IFJldHVybnMgdGhlIFNlY3VyZS9Ob24tc2VjdXJlIHNoYXJlZCBtZW1vcnkgY29uZmlnLgorICoK KyAqIENhbGwgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NN Q19HRVRfU0hNX0NPTkZJRworICogYTEtNglOb3QgdXNlZAorICogYTcJSHlwZXJ2aXNvciBDbGll bnQgSUQgcmVnaXN0ZXIKKyAqCisgKiBIYXZlIGNvbmZpZyByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6 CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCisgKiBhMQlQaHlzaWNhbCBhZGRyZXNzIG9mIHN0 YXJ0IG9mIFNITQorICogYTIJU2l6ZSBvZiBvZiBTSE0KKyAqIGEzCUNhY2hlIHNldHRpbmdzIG9m IG1lbW9yeSwgYXMgZGVmaW5lZCBieSB0aGUKKyAqCU9QVEVFX1NNQ19TSE1fKiB2YWx1ZXMgYWJv dmUKKyAqIGE0LTcJUHJlc2VydmVkCisgKgorICogTm90IGF2YWlsYWJsZSByZWdpc3RlciB1c2Fn ZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMCisgKiBhMS0zIE5vdCB1c2VkCisg KiBhNC03CVByZXNlcnZlZAorICovCisjZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURfR0VUX1NITV9D T05GSUcJNworI2RlZmluZSBPUFRFRV9TTUNfR0VUX1NITV9DT05GSUcgXAorCU9QVEVFX1NNQ19G QVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfR0VUX1NITV9DT05GSUcpCisKK3N0cnVjdCBv cHRlZV9zbWNfZ2V0X3NobV9jb25maWdfcmVzdWx0IHsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsK Kwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBs b25nIHNldHRpbmdzOworfTsKKworLyoKKyAqIEV4Y2hhbmdlcyBjYXBhYmlsaXRpZXMgYmV0d2Vl biBub3JtYWwgd29ybGQgYW5kIHNlY3VyZSB3b3JsZAorICoKKyAqIENhbGwgcmVnaXN0ZXIgdXNh Z2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19FWENIQU5HRV9DQVBBQklMSVRJ RVMKKyAqIGExCWJpdGZpZWxkIG9mIG5vcm1hbCB3b3JsZCBjYXBhYmlsaXRpZXMgT1BURUVfU01D X05TRUNfQ0FQXyoKKyAqIGEyLTYJTm90IHVzZWQKKyAqIGE3CUh5cGVydmlzb3IgQ2xpZW50IElE IHJlZ2lzdGVyCisgKgorICogTm9ybWFsIHJldHVybiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9Q VEVFX1NNQ19SRVRVUk5fT0sKKyAqIGExCWJpdGZpZWxkIG9mIHNlY3VyZSB3b3JsZCBjYXBhYmls aXRpZXMgT1BURUVfU01DX1NFQ19DQVBfKgorICogYTItNwlQcmVzZXJ2ZWQKKyAqCisgKiBFcnJv ciByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJ TCwgY2FuJ3QgdXNlIHRoZSBjYXBhYmlsaXRpZXMgZnJvbSBub3JtYWwgd29ybGQKKyAqIGExCWJp dGZpZWxkIG9mIHNlY3VyZSB3b3JsZCBjYXBhYmlsaXRpZXMgT1BURUVfU01DX1NFQ19DQVBfKgor ICogYTItNyBQcmVzZXJ2ZWQKKyAqLworLyogTm9ybWFsIHdvcmxkIHdvcmtzIGFzIGEgdW5pcHJv Y2Vzc29yIHN5c3RlbSAqLworI2RlZmluZSBPUFRFRV9TTUNfTlNFQ19DQVBfVU5JUFJPQ0VTU09S CQlCSVQoMCkKKy8qIFNlY3VyZSB3b3JsZCBoYXMgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBmb3Ig bm9ybWFsIHdvcmxkIHRvIHVzZSAqLworI2RlZmluZSBPUFRFRV9TTUNfU0VDX0NBUF9IQVZFX1JF U0VSVkVSRURfU0hNCUJJVCgwKQorLyogU2VjdXJlIHdvcmxkIGNhbiBjb21tdW5pY2F0ZSB2aWEg cHJldmlvdXNseSB1bnJlZ2lzdGVyZWQgc2hhcmVkIG1lbW9yeSAqLworI2RlZmluZSBPUFRFRV9T TUNfU0VDX0NBUF9VTlJFR0lTVEVSRURfU0hNCUJJVCgxKQorI2RlZmluZSBPUFRFRV9TTUNfRlVO Q0lEX0VYQ0hBTkdFX0NBUEFCSUxJVElFUwk5CisjZGVmaW5lIE9QVEVFX1NNQ19FWENIQU5HRV9D QVBBQklMSVRJRVMgXAorCU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURf RVhDSEFOR0VfQ0FQQUJJTElUSUVTKQorCitzdHJ1Y3Qgb3B0ZWVfc21jX2V4Y2hhbmdlX2NhcGFi aWxpdGllc19yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcg Y2FwYWJpbGl0aWVzOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOworCXVuc2lnbmVkIGxvbmcg cmVzZXJ2ZWQxOworfTsKKworLyoKKyAqIERpc2FibGUgYW5kIGVtcHRpZXMgY2FjaGUgb2Ygc2hh cmVkIG1lbW9yeSBvYmplY3RzCisgKgorICogU2VjdXJlIHdvcmxkIGNhbiBjYWNoZSBmcmVxdWVu dGx5IHVzZWQgc2hhcmVkIG1lbW9yeSBvYmplY3RzLCBmb3IKKyAqIGV4YW1wbGUgb2JqZWN0cyB1 c2VkIGFzIFJQQyBhcmd1bWVudHMuIFdoZW4gc2VjdXJlIHdvcmxkIGlzIGlkbGUgdGhpcworICog ZnVuY3Rpb24gcmV0dXJucyBvbmUgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UgdG8gZnJlZS4gVG8g ZGlzYWJsZSB0aGUKKyAqIGNhY2hlIGFuZCBmcmVlIGFsbCBjYWNoZWQgb2JqZWN0cyB0aGlzIGZ1 bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgdW50aWwKKyAqIGl0IHJldHVybnMgT1BURUVfU01DX1JF VFVSTl9FTk9UQVZBSUwuCisgKgorICogQ2FsbCByZWdpc3RlciB1c2FnZToKKyAqIGEwCVNNQyBG dW5jdGlvbiBJRCwgT1BURUVfU01DX0RJU0FCTEVfU0hNX0NBQ0hFCisgKiBhMS02CU5vdCB1c2Vk CisgKiBhNwlIeXBlcnZpc29yIENsaWVudCBJRCByZWdpc3RlcgorICoKKyAqIE5vcm1hbCByZXR1 cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCisgKiBhMQlVcHBl ciAzMmJpdCBvZiBhIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llCisgKiBhMglMb3dlciAzMmJp dCBvZiBhIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llCisgKiBhMy03CVByZXNlcnZlZAorICoK KyAqIENhY2hlIGVtcHR5IHJldHVybiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19S RVRVUk5fRU5PVEFWQUlMCisgKiBhMS03CVByZXNlcnZlZAorICoKKyAqIE5vdCBpZGxlIHJldHVy biByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRUJVU1kKKyAqIGExLTcJ UHJlc2VydmVkCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9ESVNBQkxFX1NITV9DQUNI RQkxMAorI2RlZmluZSBPUFRFRV9TTUNfRElTQUJMRV9TSE1fQ0FDSEUgXAorCU9QVEVFX1NNQ19G QVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfRElTQUJMRV9TSE1fQ0FDSEUpCisKK3N0cnVj dCBvcHRlZV9zbWNfZGlzYWJsZV9zaG1fY2FjaGVfcmVzdWx0IHsKKwl1bnNpZ25lZCBsb25nIHN0 YXR1czsKKwl1bnNpZ25lZCBsb25nIHNobV91cHBlcjMyOworCXVuc2lnbmVkIGxvbmcgc2htX2xv d2VyMzI7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDA7Cit9OworCisvKgorICogRW5hYmxlIGNh Y2hlIG9mIHNoYXJlZCBtZW1vcnkgb2JqZWN0cworICoKKyAqIFNlY3VyZSB3b3JsZCBjYW4gY2Fj aGUgZnJlcXVlbnRseSB1c2VkIHNoYXJlZCBtZW1vcnkgb2JqZWN0cywgZm9yCisgKiBleGFtcGxl IG9iamVjdHMgdXNlZCBhcyBSUEMgYXJndW1lbnRzLiBXaGVuIHNlY3VyZSB3b3JsZCBpcyBpZGxl IHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgT1BURUVfU01DX1JFVFVSTl9PSyBhbmQgdGhlIGNh Y2hlIGlzIGVuYWJsZWQuIElmCisgKiBzZWN1cmUgd29ybGQgaXNuJ3QgaWRsZSBPUFRFRV9TTUNf UkVUVVJOX0VCVVNZIGlzIHJldHVybmVkLgorICoKKyAqIENhbGwgcmVnaXN0ZXIgdXNhZ2U6Cisg KiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19FTkFCTEVfU0hNX0NBQ0hFCisgKiBhMS02 CU5vdCB1c2VkCisgKiBhNwlIeXBlcnZpc29yIENsaWVudCBJRCByZWdpc3RlcgorICoKKyAqIE5v cm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCisg KiBhMS03CVByZXNlcnZlZAorICoKKyAqIE5vdCBpZGxlIHJldHVybiByZWdpc3RlciB1c2FnZToK KyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRUJVU1kKKyAqIGExLTcJUHJlc2VydmVkCisgKi8KKyNk ZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9FTkFCTEVfU0hNX0NBQ0hFCTExCisjZGVmaW5lIE9QVEVF X1NNQ19FTkFCTEVfU0hNX0NBQ0hFIFwKKwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9T TUNfRlVOQ0lEX0VOQUJMRV9TSE1fQ0FDSEUpCisKKy8qCisgKiBSZXN1bWUgZnJvbSBSUEMgKGZv ciBleGFtcGxlIGFmdGVyIHByb2Nlc3NpbmcgYW4gSVJRKQorICoKKyAqIENhbGwgcmVnaXN0ZXIg dXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9N X1JQQworICogYTEtMwlWYWx1ZSBvZiBhMS0zIHdoZW4gT1BURUVfU01DX0NBTExfV0lUSF9BUkcg cmV0dXJuZWQKKyAqCU9QVEVFX1NNQ19SRVRVUk5fUlBDIGluIGEwCisgKgorICogUmV0dXJuIHJl Z2lzdGVyIHVzYWdlIGlzIHRoZSBzYW1lIGFzIGZvciBPUFRFRV9TTUNfKkNBTExfV0lUSF9BUkcg YWJvdmUuCisgKgorICogUG9zc2libGUgcmV0dXJuIHZhbHVlcworICogT1BURUVfU01DX1JFVFVS Tl9VTktOT1dOX0ZVTkNUSU9OCVRydXN0ZWQgT1MgZG9lcyBub3QgcmVjb2duaXplIHRoaXMKKyAq CQkJCQlmdW5jdGlvbi4KKyAqIE9QVEVFX1NNQ19SRVRVUk5fT0sJCQlPcmlnaW5hbCBjYWxsIGNv bXBsZXRlZCwgcmVzdWx0CisgKgkJCQkJdXBkYXRlZCBpbiB0aGUgcHJldmlvdXNseSBzdXBwbGll ZC4KKyAqCQkJCQlzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICogT1BURUVfU01DX1JFVFVSTl9SUEMJ CQlDYWxsIHN1c3BlbmRlZCBieSBSUEMgY2FsbCB0byBub3JtYWwKKyAqCQkJCQl3b3JsZC4KKyAq IE9QVEVFX1NNQ19SRVRVUk5fRVJFU1VNRQkJUmVzdW1lIGZhaWxlZCwgdGhlIG9wYXF1ZSByZXN1 bWUKKyAqCQkJCQlpbmZvcm1hdGlvbiB3YXMgY29ycnVwdC4KKyAqLworI2RlZmluZSBPUFRFRV9T TUNfRlVOQ0lEX1JFVFVSTl9GUk9NX1JQQwkzCisjZGVmaW5lIE9QVEVFX1NNQ19DQUxMX1JFVFVS Tl9GUk9NX1JQQyBcCisJT1BURUVfU01DX1NURF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX1JF VFVSTl9GUk9NX1JQQykKKworI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19QUkVGSVhfTUFT SwkweEZGRkYwMDAwCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fUlBDX1BSRUZJWAkJMHhGRkZG MDAwMAorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GVU5DX01BU0sJCTB4MDAwMEZGRkYK KworI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0dFVF9SUENfRlVOQyhyZXQpIFwKKwkoKHJldCkg JiBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GVU5DX01BU0spCisKKyNkZWZpbmUgT1BURUVfU01DX1JQ Q19WQUwoZnVuYykJCSgoZnVuYykgfCBPUFRFRV9TTUNfUkVUVVJOX1JQQ19QUkVGSVgpCisKKy8q CisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFJQQyBwYXJhbWV0ZXIgcGFzc2luZy4gVGhlIG1lbW9y eSBpcyB1c2VkIHRvIGhvbGQgYQorICogc3RydWN0IG9wdGVlX21zZ19hcmcuCisgKgorICogIkNh bGwiIHJlZ2lzdGVyIHVzYWdlOgorICogYTAJVGhpcyB2YWx1ZSwgT1BURUVfU01DX1JFVFVSTl9S UENfQUxMT0MKKyAqIGExCVNpemUgaW4gYnl0ZXMgb2YgcmVxdWlyZWQgYXJndW1lbnQgbWVtb3J5 CisgKiBhMglOb3QgdXNlZAorICogYTMJUmVzdW1lIGluZm9ybWF0aW9uLCBtdXN0IGJlIHByZXNl cnZlZAorICogYTQtNQlOb3QgdXNlZAorICogYTYtNwlSZXN1bWUgaW5mb3JtYXRpb24sIG11c3Qg YmUgcHJlc2VydmVkCisgKgorICogIlJldHVybiIgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMg RnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQy4KKyAqIGExCVVwcGVy IDMyYml0cyBvZiA2NGJpdCBwaHlzaWNhbCBwb2ludGVyIHRvIGFsbG9jYXRlZAorICoJbWVtb3J5 LCAoYTEgPT0gMCAmJiBhMiA9PSAwKSBpZiBzaXplIHdhcyAwIG9yIGlmIG1lbW9yeSBjYW4ndAor ICoJYmUgYWxsb2NhdGVkLgorICogYTIJTG93ZXIgMzJiaXRzIG9mIDY0Yml0IHBoeXNpY2FsIHBv aW50ZXIgdG8gYWxsb2NhdGVkCisgKgltZW1vcnksIChhMSA9PSAwICYmIGEyID09IDApIGlmIHNp emUgd2FzIDAgb3IgaWYgbWVtb3J5IGNhbid0CisgKgliZSBhbGxvY2F0ZWQKKyAqIGEzCVByZXNl cnZlZAorICogYTQJVXBwZXIgMzJiaXRzIG9mIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llIHVz ZWQgd2hlbiBmcmVlaW5nCisgKgl0aGUgbWVtb3J5IG9yIGRvaW5nIGFuIFJQQworICogYTUJTG93 ZXIgMzJiaXRzIG9mIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llIHVzZWQgd2hlbiBmcmVlaW5n CisgKgl0aGUgbWVtb3J5IG9yIGRvaW5nIGFuIFJQQworICogYTYtNwlQcmVzZXJ2ZWQKKyAqLwor I2RlZmluZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQUxMT0MJMAorI2RlZmluZSBPUFRFRV9TTUNfUkVU VVJOX1JQQ19BTExPQyBcCisJT1BURUVfU01DX1JQQ19WQUwoT1BURUVfU01DX1JQQ19GVU5DX0FM TE9DKQorCisvKgorICogRnJlZSBtZW1vcnkgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgT1BURUVf U01DX1JFVFVSTl9SUENfQUxMT0MKKyAqCisgKiAiQ2FsbCIgcmVnaXN0ZXIgdXNhZ2U6CisgKiBh MAlUaGlzIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GUkVFCisgKiBhMQlVcHBlciAzMmJp dHMgb2YgNjRiaXQgc2hhcmVkIG1lbW9yeSBjb29raWUgYmVsb25naW5nIHRvIHRoaXMKKyAqCWFy Z3VtZW50IG1lbW9yeQorICogYTIJTG93ZXIgMzJiaXRzIG9mIDY0Yml0IHNoYXJlZCBtZW1vcnkg Y29va2llIGJlbG9uZ2luZyB0byB0aGlzCisgKglhcmd1bWVudCBtZW1vcnkKKyAqIGEzLTcJUmVz dW1lIGluZm9ybWF0aW9uLCBtdXN0IGJlIHByZXNlcnZlZAorICoKKyAqICJSZXR1cm4iIHJlZ2lz dGVyIHVzYWdlOgorICogYTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5f RlJPTV9SUEMuCisgKiBhMS0yCU5vdCB1c2VkCisgKiBhMy03CVByZXNlcnZlZAorICovCisjZGVm aW5lIE9QVEVFX1NNQ19SUENfRlVOQ19GUkVFCQkyCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5f UlBDX0ZSRUUgXAorCU9QVEVFX1NNQ19SUENfVkFMKE9QVEVFX1NNQ19SUENfRlVOQ19GUkVFKQor CisvKgorICogRGVsaXZlciBhbiBJUlEgaW4gbm9ybWFsIHdvcmxkLgorICoKKyAqICJDYWxsIiBy ZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fUlBDX0lSUQorICogYTEtNwlS ZXN1bWUgaW5mb3JtYXRpb24sIG11c3QgYmUgcHJlc2VydmVkCisgKgorICogIlJldHVybiIgcmVn aXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19DQUxMX1JFVFVS Tl9GUk9NX1JQQy4KKyAqIGExLTcJUHJlc2VydmVkCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX1JQ Q19GVU5DX0lSUQkJNAorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19JUlEgXAorCU9QVEVF X1NNQ19SUENfVkFMKE9QVEVFX1NNQ19SUENfRlVOQ19JUlEpCisKKy8qCisgKiBEbyBhbiBSUEMg cmVxdWVzdC4gVGhlIHN1cHBsaWVkIHN0cnVjdCBvcHRlZV9tc2dfYXJnIHRlbGxzIHdoaWNoCisg KiByZXF1ZXN0IHRvIGRvIGFuZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHJlcXVlc3QuIFRoZSBm b2xsb3dpbmcgZmllbGRzCisgKiBhcmUgdXNlZCAodGhlIHJlc3QgYXJlIHVudXNlZCk6CisgKiAt IGNtZAkJdGhlIFJlcXVlc3QgSUQKKyAqIC0gcmV0CQlyZXR1cm4gdmFsdWUgb2YgdGhlIHJlcXVl c3QsIGZpbGxlZCBpbiBieSBub3JtYWwgd29ybGQKKyAqIC0gbnVtX3BhcmFtcwkJbnVtYmVyIG9m IHBhcmFtZXRlcnMgZm9yIHRoZSByZXF1ZXN0CisgKiAtIHBhcmFtcwkJdGhlIHBhcmFtZXRlcnMK KyAqIC0gcGFyYW1fYXR0cnMJYXR0cmlidXRlcyBvZiB0aGUgcGFyYW1ldGVycworICoKKyAqICJD YWxsIiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fUlBDX0NNRAorICog YTEJVXBwZXIgMzJiaXQgb2YgYSA2NGJpdCBTaGFyZWQgbWVtb3J5IGNvb2tpZSBob2xkaW5nIGEK KyAqCXN0cnVjdCBvcHRlZV9tc2dfYXJnLCBtdXN0IGJlIHByZXNlcnZlZCwgb25seSB0aGUgZGF0 YSBzaG91bGQKKyAqCWJlIHVwZGF0ZWQKKyAqIGEyCUxvd2VyIDMyYml0IG9mIGEgNjRiaXQgU2hh cmVkIG1lbW9yeSBjb29raWUgaG9sZGluZyBhCisgKglzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZywgbXVz dCBiZSBwcmVzZXJ2ZWQsIG9ubHkgdGhlIGRhdGEgc2hvdWxkCisgKgliZSB1cGRhdGVkCisgKiBh My03CVJlc3VtZSBpbmZvcm1hdGlvbiwgbXVzdCBiZSBwcmVzZXJ2ZWQKKyAqCisgKiAiUmV0dXJu IiByZWdpc3RlciB1c2FnZToKKyAqIGEwCVNNQyBGdW5jdGlvbiBJRCwgT1BURUVfU01DX0NBTExf UkVUVVJOX0ZST01fUlBDLgorICogYTEtMglOb3QgdXNlZAorICogYTMtNwlQcmVzZXJ2ZWQKKyAq LworI2RlZmluZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQ01ECQk1CisjZGVmaW5lIE9QVEVFX1NNQ19S RVRVUk5fUlBDX0NNRCBcCisJT1BURUVfU01DX1JQQ19WQUwoT1BURUVfU01DX1JQQ19GVU5DX0NN RCkKKworLyogUmV0dXJuZWQgaW4gYTAgKi8KKyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9VTktO T1dOX0ZVTkNUSU9OIDB4RkZGRkZGRkYKKworLyogUmV0dXJuZWQgaW4gYTAgb25seSBmcm9tIFRy dXN0ZWQgT1MgZnVuY3Rpb25zICovCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fT0sJCTB4MAor I2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VUSFJFQURfTElNSVQJMHgxCisjZGVmaW5lIE9QVEVF X1NNQ19SRVRVUk5fRUJVU1kJCTB4MgorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VSRVNVTUUJ MHgzCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fRUJBREFERFIJMHg0CisjZGVmaW5lIE9QVEVF X1NNQ19SRVRVUk5fRUJBRENNRAkweDUKKyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9FTk9NRU0J CTB4NgorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJTAkweDcKKyNkZWZpbmUgT1BU RUVfU01DX1JFVFVSTl9JU19SUEMocmV0KQlfX29wdGVlX3NtY19yZXR1cm5faXNfcnBjKChyZXQp KQorCitzdGF0aWMgaW5saW5lIGJvb2wgX19vcHRlZV9zbWNfcmV0dXJuX2lzX3JwYyh1MzIgcmV0 KQoreworCXJldHVybiByZXQgIT0gT1BURUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OICYm CisJICAgICAgIChyZXQgJiBPUFRFRV9TTUNfUkVUVVJOX1JQQ19QUkVGSVhfTUFTSykgPT0KKwkJ CU9QVEVFX1NNQ19SRVRVUk5fUlBDX1BSRUZJWDsKK30KKworI2VuZGlmIC8qIE9QVEVFX1NNQ19I ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9ycGMuYyBiL2RyaXZlcnMvdGVlL29w dGVlL3JwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODgxNGVj YTA2MDIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUvcnBjLmMKQEAgLTAs MCArMSwzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgTGluYXJvIExpbWl0 ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwg ZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0RO QU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90ZWVf ZHJ2Lmg+CisjaW5jbHVkZSAib3B0ZWVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIm9wdGVlX3NtYy5o IgorCitzdHJ1Y3Qgd3FfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3Qg Y29tcGxldGlvbiBjOworCXUzMiBrZXk7Cit9OworCit2b2lkIG9wdGVlX3dhaXRfcXVldWVfaW5p dChzdHJ1Y3Qgb3B0ZWVfd2FpdF9xdWV1ZSAqcHJpdikKK3sKKwltdXRleF9pbml0KCZwcml2LT5t dSk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmRiKTsKK30KKwordm9pZCBvcHRlZV93YWl0X3F1 ZXVlX2V4aXQoc3RydWN0IG9wdGVlX3dhaXRfcXVldWUgKnByaXYpCit7CisJbXV0ZXhfZGVzdHJv eSgmcHJpdi0+bXUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2Z1bmNfY21kX2dldF90 aW1lKHN0cnVjdCBvcHRlZV9tc2dfYXJnICphcmcpCit7CisJc3RydWN0IHRpbWVzcGVjNjQgdHM7 CisKKwlpZiAoYXJnLT5udW1fcGFyYW1zICE9IDEpCisJCWdvdG8gYmFkOworCWlmICgoYXJnLT5w YXJhbXNbMF0uYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFTSykgIT0KKwkJCU9QVEVFX01T R19BVFRSX1RZUEVfVkFMVUVfT1VUUFVUKQorCQlnb3RvIGJhZDsKKworCWdldG5zdGltZW9mZGF5 NjQoJnRzKTsKKwlhcmctPnBhcmFtc1swXS51LnZhbHVlLmEgPSB0cy50dl9zZWM7CisJYXJnLT5w YXJhbXNbMF0udS52YWx1ZS5iID0gdHMudHZfbnNlYzsKKworCWFyZy0+cmV0ID0gVEVFQ19TVUND RVNTOworCXJldHVybjsKK2JhZDoKKwlhcmctPnJldCA9IFRFRUNfRVJST1JfQkFEX1BBUkFNRVRF UlM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd3FfZW50cnkgKndxX2VudHJ5X2dldChzdHJ1Y3Qgb3B0 ZWVfd2FpdF9xdWV1ZSAqd3EsIHUzMiBrZXkpCit7CisJc3RydWN0IHdxX2VudHJ5ICp3OworCisJ bXV0ZXhfbG9jaygmd3EtPm11KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJndxLT5kYiwg bGluaykKKwkJaWYgKHctPmtleSA9PSBrZXkpCisJCQlnb3RvIG91dDsKKworCXcgPSBrbWFsbG9j KHNpemVvZigqdyksIEdGUF9LRVJORUwpOworCWlmICh3KSB7CisJCWluaXRfY29tcGxldGlvbigm dy0+Yyk7CisJCXctPmtleSA9IGtleTsKKwkJbGlzdF9hZGRfdGFpbCgmdy0+bGluaywgJndxLT5k Yik7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmd3EtPm11KTsKKwlyZXR1cm4gdzsKK30KKwor c3RhdGljIHZvaWQgd3Ffc2xlZXAoc3RydWN0IG9wdGVlX3dhaXRfcXVldWUgKndxLCB1MzIga2V5 KQoreworCXN0cnVjdCB3cV9lbnRyeSAqdyA9IHdxX2VudHJ5X2dldCh3cSwga2V5KTsKKworCWlm ICh3KSB7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnctPmMpOworCQltdXRleF9sb2NrKCZ3cS0+ bXUpOworCQlsaXN0X2RlbCgmdy0+bGluayk7CisJCW11dGV4X3VubG9jaygmd3EtPm11KTsKKwkJ a2ZyZWUodyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cV93YWtldXAoc3RydWN0IG9wdGVlX3dh aXRfcXVldWUgKndxLCB1MzIga2V5KQoreworCXN0cnVjdCB3cV9lbnRyeSAqdyA9IHdxX2VudHJ5 X2dldCh3cSwga2V5KTsKKworCWlmICh3KQorCQljb21wbGV0ZSgmdy0+Yyk7Cit9CisKK3N0YXRp YyB2b2lkIGhhbmRsZV9ycGNfZnVuY19jbWRfd3Eoc3RydWN0IG9wdGVlICpvcHRlZSwKKwkJCQkg ICBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqYXJnKQoreworCWlmIChhcmctPm51bV9wYXJhbXMgIT0g MSkKKwkJZ290byBiYWQ7CisKKwlpZiAoKGFyZy0+cGFyYW1zWzBdLmF0dHIgJiBPUFRFRV9NU0df QVRUUl9UWVBFX01BU0spICE9CisJCQlPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUKQor CQlnb3RvIGJhZDsKKworCXN3aXRjaCAoYXJnLT5wYXJhbXNbMF0udS52YWx1ZS5hKSB7CisJY2Fz ZSBPUFRFRV9NU0dfUlBDX1dBSVRfUVVFVUVfU0xFRVA6CisJCXdxX3NsZWVwKCZvcHRlZS0+d2Fp dF9xdWV1ZSwgYXJnLT5wYXJhbXNbMF0udS52YWx1ZS5iKTsKKwkJYnJlYWs7CisJY2FzZSBPUFRF RV9NU0dfUlBDX1dBSVRfUVVFVUVfV0FLRVVQOgorCQl3cV93YWtldXAoJm9wdGVlLT53YWl0X3F1 ZXVlLCBhcmctPnBhcmFtc1swXS51LnZhbHVlLmIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQln b3RvIGJhZDsKKwl9CisKKwlhcmctPnJldCA9IFRFRUNfU1VDQ0VTUzsKKwlyZXR1cm47CitiYWQ6 CisJYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTOworfQorCitzdGF0aWMgdm9p ZCBoYW5kbGVfcnBjX2Z1bmNfY21kX3dhaXQoc3RydWN0IG9wdGVlX21zZ19hcmcgKmFyZykKK3sK Kwl1MzIgbXNlY190b193YWl0OworCisJaWYgKGFyZy0+bnVtX3BhcmFtcyAhPSAxKQorCQlnb3Rv IGJhZDsKKworCWlmICgoYXJnLT5wYXJhbXNbMF0uYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVf TUFTSykgIT0KKwkJCU9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQpCisJCWdvdG8gYmFk OworCisJbXNlY190b193YWl0ID0gYXJnLT5wYXJhbXNbMF0udS52YWx1ZS5hOworCisJLyogc2V0 IHRhc2sncyBzdGF0ZSB0byBpbnRlcnJ1cHRpYmxlIHNsZWVwICovCisJc2V0X2N1cnJlbnRfc3Rh dGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCS8qIHRha2UgYSBuYXAgKi8KKwltc2xlZXAobXNl Y190b193YWl0KTsKKworCWFyZy0+cmV0ID0gVEVFQ19TVUNDRVNTOworCXJldHVybjsKK2JhZDoK KwlhcmctPnJldCA9IFRFRUNfRVJST1JfQkFEX1BBUkFNRVRFUlM7Cit9CisKK3N0YXRpYyB2b2lk IGhhbmRsZV9ycGNfc3VwcF9jbWQoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQkJc3RydWN0 IG9wdGVlX21zZ19hcmcgKmFyZykKK3sKKwlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXM7CisKKwlh cmctPnJldF9vcmlnaW4gPSBURUVDX09SSUdJTl9DT01NUzsKKworCXBhcmFtcyA9IGttYWxsb2Nf YXJyYXkoYXJnLT5udW1fcGFyYW1zLCBzaXplb2Yoc3RydWN0IHRlZV9wYXJhbSksCisJCQkgICAg ICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbXMpIHsKKwkJYXJnLT5yZXQgPSBURUVDX0VSUk9S X09VVF9PRl9NRU1PUlk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3B0ZWVfZnJvbV9tc2dfcGFy YW0ocGFyYW1zLCBhcmctPm51bV9wYXJhbXMsIGFyZy0+cGFyYW1zKSkgeworCQlhcmctPnJldCA9 IFRFRUNfRVJST1JfQkFEX1BBUkFNRVRFUlM7CisJCWdvdG8gb3V0OworCX0KKworCWFyZy0+cmV0 ID0gb3B0ZWVfc3VwcF90aHJkX3JlcShjdHgsIGFyZy0+Y21kLCBhcmctPm51bV9wYXJhbXMsIHBh cmFtcyk7CisKKwlpZiAob3B0ZWVfdG9fbXNnX3BhcmFtKGFyZy0+cGFyYW1zLCBhcmctPm51bV9w YXJhbXMsIHBhcmFtcykpCisJCWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9CQURfUEFSQU1FVEVSUzsK K291dDoKKwlrZnJlZShwYXJhbXMpOworfQorCitzdGF0aWMgc3RydWN0IHRlZV9zaG0gKmNtZF9h bGxvY19zdXBwbChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc2l6ZV90IHN6KQoreworCXUzMiBy ZXQ7CisJc3RydWN0IHRlZV9wYXJhbSBwYXJhbTsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVl X2dldF9kcnZkYXRhKGN0eC0+dGVlZGV2KTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJcGFy YW0uYXR0ciA9IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ7CisJcGFyYW0u dS52YWx1ZS5hID0gT1BURUVfTVNHX1JQQ19TSE1fVFlQRV9BUFBMOworCXBhcmFtLnUudmFsdWUu YiA9IHN6OworCXBhcmFtLnUudmFsdWUuYyA9IDA7CisKKwlyZXQgPSBvcHRlZV9zdXBwX3RocmRf cmVxKGN0eCwgT1BURUVfTVNHX1JQQ19DTURfU0hNX0FMTE9DLCAxLCAmcGFyYW0pOworCWlmIChy ZXQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfbG9jaygmb3B0ZWUtPnN1 cHAuY3R4X211dGV4KTsKKwkvKiBJbmNyZWFzZXMgY291bnQgYXMgc2VjdXJlIHdvcmxkIGRvZXNu J3QgaGF2ZSBhIHJlZmVyZW5jZSAqLworCXNobSA9IHRlZV9zaG1fZ2V0X2Zyb21faWQob3B0ZWUt PnN1cHAuY3R4LCBwYXJhbS51LnZhbHVlLmMpOworCW11dGV4X3VubG9jaygmb3B0ZWUtPnN1cHAu Y3R4X211dGV4KTsKKwlyZXR1cm4gc2htOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2Z1 bmNfY21kX3NobV9hbGxvYyhzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCQkJICBzdHJ1Y3Qg b3B0ZWVfbXNnX2FyZyAqYXJnKQoreworCXBoeXNfYWRkcl90IHBhOworCXN0cnVjdCB0ZWVfc2ht ICpzaG07CisJc2l6ZV90IHN6OworCXNpemVfdCBuOworCisJYXJnLT5yZXRfb3JpZ2luID0gVEVF Q19PUklHSU5fQ09NTVM7CisKKwlpZiAoIWFyZy0+bnVtX3BhcmFtcyB8fAorCSAgICBhcmctPnBh cmFtc1swXS5hdHRyICE9IE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQpIHsKKwkJYXJn LT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTOworCQlyZXR1cm47CisJfQorCisJZm9y IChuID0gMTsgbiA8IGFyZy0+bnVtX3BhcmFtczsgbisrKSB7CisJCWlmIChhcmctPnBhcmFtc1tu XS5hdHRyICE9IE9QVEVFX01TR19BVFRSX1RZUEVfTk9ORSkgeworCQkJYXJnLT5yZXQgPSBURUVD X0VSUk9SX0JBRF9QQVJBTUVURVJTOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc3ogPSBhcmct PnBhcmFtc1swXS51LnZhbHVlLmI7CisJc3dpdGNoIChhcmctPnBhcmFtc1swXS51LnZhbHVlLmEp IHsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZUEVfQVBQTDoKKwkJc2htID0gY21kX2FsbG9j X3N1cHBsKGN0eCwgc3opOworCQlicmVhazsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZUEVf S0VSTkVMOgorCQlzaG0gPSB0ZWVfc2htX2FsbG9jKGN0eCwgc3osIFRFRV9TSE1fTUFQUEVEKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJBTUVU RVJTOworCQlyZXR1cm47CisJfQorCisJaWYgKElTX0VSUihzaG0pKSB7CisJCWFyZy0+cmV0ID0g VEVFQ19FUlJPUl9PVVRfT0ZfTUVNT1JZOworCQlyZXR1cm47CisJfQorCisJaWYgKHRlZV9zaG1f Z2V0X3BhKHNobSwgMCwgJnBhKSkgeworCQlhcmctPnJldCA9IFRFRUNfRVJST1JfQkFEX1BBUkFN RVRFUlM7CisJCWdvdG8gYmFkOworCX0KKworCWFyZy0+cGFyYW1zWzBdLmF0dHIgPSBPUFRFRV9N U0dfQVRUUl9UWVBFX1RNRU1fT1VUUFVUOworCWFyZy0+cGFyYW1zWzBdLnUudG1lbS5idWZfcHRy ID0gcGE7CisJYXJnLT5wYXJhbXNbMF0udS50bWVtLnNpemUgPSBzejsKKwlhcmctPnBhcmFtc1sw XS51LnRtZW0uc2htX3JlZiA9ICh1bnNpZ25lZCBsb25nKXNobTsKKwlhcmctPnJldCA9IFRFRUNf U1VDQ0VTUzsKKwlyZXR1cm47CitiYWQ6CisJdGVlX3NobV9mcmVlKHNobSk7Cit9CisKK3N0YXRp YyB2b2lkIGNtZF9mcmVlX3N1cHBsKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVl X3NobSAqc2htKQoreworCXN0cnVjdCB0ZWVfcGFyYW0gcGFyYW07CisKKwlwYXJhbS5hdHRyID0g VEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTk9VVDsKKwlwYXJhbS51LnZhbHVlLmEg PSBPUFRFRV9NU0dfUlBDX1NITV9UWVBFX0FQUEw7CisJcGFyYW0udS52YWx1ZS5iID0gdGVlX3No bV9nZXRfaWQoc2htKTsKKwlwYXJhbS51LnZhbHVlLmMgPSAwOworCisJLyoKKwkgKiBNYXRjaCB0 aGUgdGVlX3NobV9nZXRfZnJvbV9pZCgpIGluIGNtZF9hbGxvY19zdXBwbCgpIGFzIHNlY3VyZQor CSAqIHdvcmxkIGhhcyByZWxlYXNlZCBpdHMgcmVmZXJlbmNlLgorCSAqCisJICogSXQncyBiZXR0 ZXIgdG8gZG8gdGhpcyBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCB0byBzdXBwbGljYW50CisJ ICogYXMgd2UnZCBsaWtlIHRvIGxldCB0aGUgcHJvY2VzcyBkb2luZyB0aGUgaW5pdGlhbCBhbGxv Y2F0aW9uIHRvCisJICogZG8gcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UgdG9vIGluIG9yZGVy IHRvIGF2b2lkIHN0YWNraW5nCisJICogbWFueSBwZW5kaW5nIGZwdXQoKSBvbiB0aGUgY2xpZW50 IHByb2Nlc3MuIFRoaXMgY291bGQgb3RoZXJ3aXNlCisJICogaGFwcGVuIGlmIHNlY3VyZSB3b3Js ZCBkb2VzIG1hbnkgYWxsb2NhdGUgYW5kIGZyZWUgaW4gYSBzaW5nbGUKKwkgKiBpbnZva2UuCisJ ICovCisJdGVlX3NobV9wdXQoc2htKTsKKworCW9wdGVlX3N1cHBfdGhyZF9yZXEoY3R4LCBPUFRF RV9NU0dfUlBDX0NNRF9TSE1fRlJFRSwgMSwgJnBhcmFtKTsKK30KKworc3RhdGljIHZvaWQgaGFu ZGxlX3JwY19mdW5jX2NtZF9zaG1fZnJlZShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCQkJ IHN0cnVjdCBvcHRlZV9tc2dfYXJnICphcmcpCit7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwor CWFyZy0+cmV0X29yaWdpbiA9IFRFRUNfT1JJR0lOX0NPTU1TOworCisJaWYgKGFyZy0+bnVtX3Bh cmFtcyAhPSAxIHx8CisJICAgIGFyZy0+cGFyYW1zWzBdLmF0dHIgIT0gT1BURUVfTVNHX0FUVFJf VFlQRV9WQUxVRV9JTlBVVCkgeworCQlhcmctPnJldCA9IFRFRUNfRVJST1JfQkFEX1BBUkFNRVRF UlM7CisJCXJldHVybjsKKwl9CisKKwlzaG0gPSAoc3RydWN0IHRlZV9zaG0gKikodW5zaWduZWQg bG9uZylhcmctPnBhcmFtc1swXS51LnZhbHVlLmI7CisJc3dpdGNoIChhcmctPnBhcmFtc1swXS51 LnZhbHVlLmEpIHsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZUEVfQVBQTDoKKwkJY21kX2Zy ZWVfc3VwcGwoY3R4LCBzaG0pOworCQlicmVhazsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZ UEVfS0VSTkVMOgorCQl0ZWVfc2htX2ZyZWUoc2htKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTOworCX0KKwlhcmctPnJldCA9IFRF RUNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JwY19mdW5jX2NtZChzdHJ1Y3Qg dGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IG9wdGVlICpvcHRlZSwKKwkJCQlzdHJ1Y3QgdGVlX3No bSAqc2htKQoreworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICphcmc7CisKKwlhcmcgPSB0ZWVfc2ht X2dldF92YShzaG0sIDApOworCWlmIChJU19FUlIoYXJnKSkgeworCQlwcl9lcnIoIiVzOiB0ZWVf c2htX2dldF92YSAlcCBmYWlsZWRcbiIsIF9fZnVuY19fLCBzaG0pOworCQlyZXR1cm47CisJfQor CisJc3dpdGNoIChhcmctPmNtZCkgeworCWNhc2UgT1BURUVfTVNHX1JQQ19DTURfR0VUX1RJTUU6 CisJCWhhbmRsZV9ycGNfZnVuY19jbWRfZ2V0X3RpbWUoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBP UFRFRV9NU0dfUlBDX0NNRF9XQUlUX1FVRVVFOgorCQloYW5kbGVfcnBjX2Z1bmNfY21kX3dxKG9w dGVlLCBhcmcpOworCQlicmVhazsKKwljYXNlIE9QVEVFX01TR19SUENfQ01EX1NVU1BFTkQ6CisJ CWhhbmRsZV9ycGNfZnVuY19jbWRfd2FpdChhcmcpOworCQlicmVhazsKKwljYXNlIE9QVEVFX01T R19SUENfQ01EX1NITV9BTExPQzoKKwkJaGFuZGxlX3JwY19mdW5jX2NtZF9zaG1fYWxsb2MoY3R4 LCBhcmcpOworCQlicmVhazsKKwljYXNlIE9QVEVFX01TR19SUENfQ01EX1NITV9GUkVFOgorCQlo YW5kbGVfcnBjX2Z1bmNfY21kX3NobV9mcmVlKGN0eCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJaGFuZGxlX3JwY19zdXBwX2NtZChjdHgsIGFyZyk7CisJfQorfQorCisvKioKKyAqIG9w dGVlX2hhbmRsZV9ycGMoKSAtIGhhbmRsZSBSUEMgZnJvbSBzZWN1cmUgd29ybGQKKyAqIEBjdHg6 CWNvbnRleHQgZG9pbmcgdGhlIFJQQworICogQHBhcmFtOgl2YWx1ZSBvZiByZWdpc3RlcnMgZm9y IHRoZSBSUEMKKyAqCisgKiBSZXN1bHQgb2YgUlBDIGlzIHdyaXR0ZW4gYmFjayBpbnRvIEBwYXJh bS4KKyAqLwordm9pZCBvcHRlZV9oYW5kbGVfcnBjKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBz dHJ1Y3Qgb3B0ZWVfcnBjX3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVl ZGV2ID0gY3R4LT50ZWVkZXY7CisJc3RydWN0IG9wdGVlICpvcHRlZSA9IHRlZV9nZXRfZHJ2ZGF0 YSh0ZWVkZXYpOworCXN0cnVjdCB0ZWVfc2htICpzaG07CisJcGh5c19hZGRyX3QgcGE7CisKKwlz d2l0Y2ggKE9QVEVFX1NNQ19SRVRVUk5fR0VUX1JQQ19GVU5DKHBhcmFtLT5hMCkpIHsKKwljYXNl IE9QVEVFX1NNQ19SUENfRlVOQ19BTExPQzoKKwkJc2htID0gdGVlX3NobV9hbGxvYyhjdHgsIHBh cmFtLT5hMSwgVEVFX1NITV9NQVBQRUQpOworCQlpZiAoIUlTX0VSUihzaG0pICYmICF0ZWVfc2ht X2dldF9wYShzaG0sIDAsICZwYSkpIHsKKwkJCXJlZ19wYWlyX2Zyb21fNjQoJnBhcmFtLT5hMSwg JnBhcmFtLT5hMiwgcGEpOworCQkJcmVnX3BhaXJfZnJvbV82NCgmcGFyYW0tPmE0LCAmcGFyYW0t PmE1LAorCQkJCQkgKHVuc2lnbmVkIGxvbmcpc2htKTsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtLT5h MSA9IDA7CisJCQlwYXJhbS0+YTIgPSAwOworCQkJcGFyYW0tPmE0ID0gMDsKKwkJCXBhcmFtLT5h NSA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRlJFRToKKwkJ c2htID0gcmVnX3BhaXJfdG9fcHRyKHBhcmFtLT5hMSwgcGFyYW0tPmEyKTsKKwkJdGVlX3NobV9m cmVlKHNobSk7CisJCWJyZWFrOworCWNhc2UgT1BURUVfU01DX1JQQ19GVU5DX0lSUToKKwkJLyoK KwkJICogQW4gSVJRIHdhcyByYWlzZWQgd2hpbGUgc2VjdXJlIHdvcmxkIHdhcyBleGVjdXRpbmcs CisJCSAqIHNpbmNlIGFsbCBJUlFzIGFyZSBoYW5kbGVkIGluIExpbnV4IGEgZHVtbXkgUlBDIGlz CisJCSAqIHBlcmZvcm1lZCB0byBsZXQgTGludXggdGFrZSB0aGUgSVJRIHRocm91Z2ggdGhlIG5v cm1hbAorCQkgKiB2ZWN0b3IuCisJCSAqLworCQlicmVhazsKKwljYXNlIE9QVEVFX1NNQ19SUENf RlVOQ19DTUQ6CisJCXNobSA9IHJlZ19wYWlyX3RvX3B0cihwYXJhbS0+YTEsIHBhcmFtLT5hMik7 CisJCWhhbmRsZV9ycGNfZnVuY19jbWQoY3R4LCBvcHRlZSwgc2htKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcHJfd2FybigiVW5rbm93biBSUEMgZnVuYyAweCV4XG4iLAorCQkJKHUzMilPUFRF RV9TTUNfUkVUVVJOX0dFVF9SUENfRlVOQyhwYXJhbS0+YTApKTsKKwkJYnJlYWs7CisJfQorCisJ cGFyYW0tPmEwID0gT1BURUVfU01DX0NBTExfUkVUVVJOX0ZST01fUlBDOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy90ZWUvb3B0ZWUvc3VwcC5jIGIvZHJpdmVycy90ZWUvb3B0ZWUvc3VwcC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjRlYTA2NzhhNDM2Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUvc3VwcC5jCkBAIC0wLDAgKzEsMjczIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMg c29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5k IG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJvcHRlZV9wcml2YXRlLmgi CisKK3ZvaWQgb3B0ZWVfc3VwcF9pbml0KHN0cnVjdCBvcHRlZV9zdXBwICpzdXBwKQoreworCW1l bXNldChzdXBwLCAwLCBzaXplb2YoKnN1cHApKTsKKwltdXRleF9pbml0KCZzdXBwLT5jdHhfbXV0 ZXgpOworCW11dGV4X2luaXQoJnN1cHAtPnRocmRfbXV0ZXgpOworCW11dGV4X2luaXQoJnN1cHAt PnN1cHBfbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmc3VwcC0+ZGF0YV90b19zdXBwKTsKKwlp bml0X2NvbXBsZXRpb24oJnN1cHAtPmRhdGFfZnJvbV9zdXBwKTsKK30KKwordm9pZCBvcHRlZV9z dXBwX3VuaW5pdChzdHJ1Y3Qgb3B0ZWVfc3VwcCAqc3VwcCkKK3sKKwltdXRleF9kZXN0cm95KCZz dXBwLT5jdHhfbXV0ZXgpOworCW11dGV4X2Rlc3Ryb3koJnN1cHAtPnRocmRfbXV0ZXgpOworCW11 dGV4X2Rlc3Ryb3koJnN1cHAtPnN1cHBfbXV0ZXgpOworfQorCisvKioKKyAqIG9wdGVlX3N1cHBf dGhyZF9yZXEoKSAtIHJlcXVlc3Qgc2VydmljZSBmcm9tIHN1cHBsaWNhbnQKKyAqIEBjdHg6CWNv bnRleHQgZG9pbmcgdGhlIHJlcXVlc3QKKyAqIEBmdW5jOglmdW5jdGlvbiByZXF1ZXN0ZWQKKyAq IEBudW1fcGFyYW1zOgludW1iZXIgb2YgZWxlbWVudHMgaW4gQHBhcmFtIGFycmF5CisgKiBAcGFy YW06CXBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3Bl cmF0aW9uIHRvIGJlIHBhc3NlZCB0byBzZWN1cmUgd29ybGQKKyAqLwordTMyIG9wdGVlX3N1cHBf dGhyZF9yZXEoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHUzMiBmdW5jLCBzaXplX3QgbnVtX3Bh cmFtcywKKwkJCXN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCWJvb2wgaW50ZXJydXB0YWJs ZTsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dldF9kcnZkYXRhKGN0eC0+dGVlZGV2KTsK KwlzdHJ1Y3Qgb3B0ZWVfc3VwcCAqc3VwcCA9ICZvcHRlZS0+c3VwcDsKKwl1MzIgcmV0OworCisJ LyoKKwkgKiBPdGhlciB0aHJlYWRzIGJsb2NrcyBoZXJlIHVudGlsIHdlJ3ZlIGNvcGllZCBvdXIg YW5zd2VyIGZyb20KKwkgKiBzdXBwbGljYW50LgorCSAqLworCXdoaWxlIChtdXRleF9sb2NrX2lu dGVycnVwdGlibGUoJnN1cHAtPnRocmRfbXV0ZXgpKSB7CisJCS8qIFNlZSBjb21tZW50IGJlbG93 IG9uIHdoZW4gdGhlIFJQQyBjYW4gYmUgaW50ZXJydXB0ZWQuICovCisJCW11dGV4X2xvY2soJnN1 cHAtPmN0eF9tdXRleCk7CisJCWludGVycnVwdGFibGUgPSAhc3VwcC0+Y3R4OworCQltdXRleF91 bmxvY2soJnN1cHAtPmN0eF9tdXRleCk7CisJCWlmIChpbnRlcnJ1cHRhYmxlKQorCQkJcmV0dXJu IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgZXhjbHVz aXZlIGFjY2VzcyBub3cgc2luY2UgdGhlIHN1cHBsaWNhbnQgYXQgdGhpcworCSAqIHBvaW50IGlz IGVpdGhlciBkb2luZyBhCisJICogd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZz dXBwLT5kYXRhX3RvX3N1cHApIG9yIGlzIGluCisJICogdXNlcnNwYWNlIHN0aWxsIGFib3V0IHRv IGRvIHRoZSBpb2N0bCgpIHRvIGVudGVyCisJICogb3B0ZWVfc3VwcF9yZWN2KCkgYmVsb3cuCisJ ICovCisKKwlzdXBwLT5mdW5jID0gZnVuYzsKKwlzdXBwLT5udW1fcGFyYW1zID0gbnVtX3BhcmFt czsKKwlzdXBwLT5wYXJhbSA9IHBhcmFtOworCXN1cHAtPnJlcV9wb3N0ZWQgPSB0cnVlOworCisJ LyogTGV0IHN1cHBsaWNhbnQgZ2V0IHRoZSBkYXRhICovCisJY29tcGxldGUoJnN1cHAtPmRhdGFf dG9fc3VwcCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHN1cHBsaWNhbnQgdG8gcHJvY2VzcyBhbmQg cmV0dXJuIHJlc3VsdCwgb25jZSB3ZSd2ZQorCSAqIHJldHVybmVkIGZyb20gd2FpdF9mb3JfY29t cGxldGlvbihkYXRhX2Zyb21fc3VwcCkgd2UgaGF2ZQorCSAqIGV4Y2x1c2l2ZSBhY2Nlc3MgYWdh aW4uCisJICovCisJd2hpbGUgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmc3Vw cC0+ZGF0YV9mcm9tX3N1cHApKSB7CisJCW11dGV4X2xvY2soJnN1cHAtPmN0eF9tdXRleCk7CisJ CWludGVycnVwdGFibGUgPSAhc3VwcC0+Y3R4OworCQlpZiAoaW50ZXJydXB0YWJsZSkgeworCQkJ LyoKKwkJCSAqIFRoZXJlJ3Mgbm8gc3VwcGxpY2FudCBhdmFpbGFibGUgYW5kIHNpbmNlIHRoZQor CQkJICogc3VwcC0+Y3R4X211dGV4IGN1cnJlbnRseSBpcyBoZWxkIG5vbmUgY2FuCisJCQkgKiBi ZWNvbWUgYXZhaWxhYmxlIHVudGlsIHRoZSBtdXRleCByZWxlYXNlZAorCQkJICogYWdhaW4uCisJ CQkgKgorCQkJICogSW50ZXJydXB0aW5nIGFuIFJQQyB0byBzdXBwbGljYW50IGlzIG9ubHkKKwkJ CSAqIGFsbG93ZWQgYXMgYSB3YXkgb2Ygc2xpZ2h0bHkgaW1wcm92aW5nIHRoZSB1c2VyCisJCQkg KiBleHBlcmllbmNlIGluIGNhc2UgdGhlIHN1cHBsaWNhbnQgaGFzbid0IGJlZW4KKwkJCSAqIHN0 YXJ0ZWQgeWV0LiBEdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiB0aGUgc3VwcGxpY2FudAorCQkJICog d2lsbCBzZXJ2ZSBhbGwgcmVxdWVzdHMgaW4gYSB0aW1lbHkgbWFubmVyIGFuZAorCQkJICogaW50 ZXJydXB0aW5nIHRoZW4gd291bGRuJ3QgbWFrZSBzZW5zZS4KKwkJCSAqLworCQkJc3VwcC0+cmV0 ID0gVEVFQ19FUlJPUl9DT01NVU5JQ0FUSU9OOworCQkJaW5pdF9jb21wbGV0aW9uKCZzdXBwLT5k YXRhX3RvX3N1cHApOworCQl9CisJCW11dGV4X3VubG9jaygmc3VwcC0+Y3R4X211dGV4KTsKKwkJ aWYgKGludGVycnVwdGFibGUpCisJCQlicmVhazsKKwl9CisKKwlyZXQgPSBzdXBwLT5yZXQ7CisJ c3VwcC0+cGFyYW0gPSBOVUxMOworCXN1cHAtPnJlcV9wb3N0ZWQgPSBmYWxzZTsKKworCS8qIFdl J3JlIGRvbmUsIGxldCBzb21lb25lIGVsc2UgdGFsayB0byB0aGUgc3VwcGxpY2FudCBub3cuICov CisJbXV0ZXhfdW5sb2NrKCZzdXBwLT50aHJkX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qKgorICogb3B0ZWVfc3VwcF9yZWN2KCkgLSByZWNlaXZlIHJlcXVlc3QgZm9yIHN1cHBsaWNh bnQKKyAqIEBjdHg6CWNvbnRleHQgcmVjZWl2aW5nIHRoZSByZXF1ZXN0CisgKiBAZnVuYzoJcmVx dWVzdGVkIGZ1bmN0aW9uIGluIHN1cHBsaWNhbnQKKyAqIEBudW1fcGFyYW1zOgludW1iZXIgb2Yg ZWxlbWVudHMgYWxsb2NhdGVkIGluIEBwYXJhbSwgdXBkYXRlZCB3aXRoIG51bWJlcgorICoJCXVz ZWQgZWxlbWVudHMKKyAqIEBwYXJhbToJc3BhY2UgZm9yIHBhcmFtZXRlcnMgZm9yIEBmdW5jCisg KgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgPDAgb24gZmFpbHVyZQorICovCitpbnQgb3B0 ZWVfc3VwcF9yZWN2KHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgKmZ1bmMsIHUzMiAqbnVt X3BhcmFtcywKKwkJICAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB0ZWVf ZGV2aWNlICp0ZWVkZXYgPSBjdHgtPnRlZWRldjsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVl X2dldF9kcnZkYXRhKHRlZWRldik7CisJc3RydWN0IG9wdGVlX3N1cHAgKnN1cHAgPSAmb3B0ZWUt PnN1cHA7CisJaW50IHJjOworCisJLyoKKwkgKiBJbiBjYXNlIHR3byB0aHJlYWRzIGluIG9uZSBz dXBwbGljYW50IGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorCSAqIHNpbXVsdGFuZW91c2x5IHdl IG5lZWQgdG8gcHJvdGVjdCB0aGUgZGF0YSB3aXRoIGEgbXV0ZXggd2hpY2gKKwkgKiB3ZSdsbCBy ZWxlYXNlIGJlZm9yZSByZXR1cm5pbmcuCisJICovCisJbXV0ZXhfbG9jaygmc3VwcC0+c3VwcF9t dXRleCk7CisKKwlpZiAoc3VwcC0+c3VwcF9uZXh0X3NlbmQpIHsKKwkJLyoKKwkJICogb3B0ZWVf c3VwcF9yZWN2KCkgaGFzIGJlZW4gY2FsbGVkIGFnYWluIHdpdGhvdXQKKwkJICogYSBvcHRlZV9z dXBwX3NlbmQoKSBpbiBiZXR3ZWVuLiBTdXBwbGljYW50IGhhcworCQkgKiBwcm9iYWJseSBiZWVu IHJlc3RhcnRlZCBiZWZvcmUgaXQgd2FzIGFibGUgdG8KKwkJICogd3JpdGUgYmFjayBsYXN0IHJl c3VsdC4gQWJvcnQgbGFzdCByZXF1ZXN0IGFuZAorCQkgKiB3YWl0IGZvciBhIG5ldy4KKwkJICov CisJCWlmIChzdXBwLT5yZXFfcG9zdGVkKSB7CisJCQlzdXBwLT5yZXQgPSBURUVDX0VSUk9SX0NP TU1VTklDQVRJT047CisJCQlzdXBwLT5zdXBwX25leHRfc2VuZCA9IGZhbHNlOworCQkJY29tcGxl dGUoJnN1cHAtPmRhdGFfZnJvbV9zdXBwKTsKKwkJfQorCX0KKworCS8qCisJICogVGhpcyBpcyB3 aGVyZSBzdXBwbGljYW50IHdpbGwgYmUgaGFuZ2luZyBtb3N0IG9mIHRoZQorCSAqIHRpbWUsIGxl dCdzIG1ha2UgdGhpcyBpbnRlcnJ1cHRhYmxlIHNvIHdlIGNhbiBlYXNpbHkKKwkgKiByZXN0YXJ0 IHN1cHBsaWNhbnQgaWYgbmVlZGVkLgorCSAqLworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2lu dGVycnVwdGlibGUoJnN1cHAtPmRhdGFfdG9fc3VwcCkpIHsKKwkJcmMgPSAtRVJFU1RBUlRTWVM7 CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdlIGhhdmUgZXhsdXNpdmUgYWNjZXNzIHRvIHRoZSBk YXRhICovCisKKwlpZiAoKm51bV9wYXJhbXMgPCBzdXBwLT5udW1fcGFyYW1zKSB7CisJCS8qCisJ CSAqIE5vdCBlbm91Z2ggcm9vbSBmb3IgcGFyYW1ldGVycywgdGVsbCBzdXBwbGljYW50CisJCSAq IGl0IGZhaWxlZCBhbmQgYWJvcnQgbGFzdCByZXF1ZXN0LgorCQkgKi8KKwkJc3VwcC0+cmV0ID0g VEVFQ19FUlJPUl9DT01NVU5JQ0FUSU9OOworCQlyYyA9IC1FSU5WQUw7CisJCWNvbXBsZXRlKCZz dXBwLT5kYXRhX2Zyb21fc3VwcCk7CisJCWdvdG8gb3V0OworCX0KKworCSpmdW5jID0gc3VwcC0+ ZnVuYzsKKwkqbnVtX3BhcmFtcyA9IHN1cHAtPm51bV9wYXJhbXM7CisJbWVtY3B5KHBhcmFtLCBz dXBwLT5wYXJhbSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pICogc3VwcC0+bnVt X3BhcmFtcyk7CisKKwkvKiBBbGxvdyBvcHRlZV9zdXBwX3NlbmQoKSBiZWxvdyB0byBkbyBpdHMg d29yayAqLworCXN1cHAtPnN1cHBfbmV4dF9zZW5kID0gdHJ1ZTsKKworCXJjID0gMDsKK291dDoK KwltdXRleF91bmxvY2soJnN1cHAtPnN1cHBfbXV0ZXgpOworCXJldHVybiByYzsKK30KKworLyoq CisgKiBvcHRlZV9zdXBwX3NlbmQoKSAtIHNlbmQgcmVzdWx0IG9mIHJlcXVlc3QgZnJvbSBzdXBw bGljYW50CisgKiBAY3R4Ogljb250ZXh0IHNlbmRpbmcgcmVzdWx0CisgKiBAcmV0OglyZXR1cm4g dmFsdWUgb2YgcmVxdWVzdAorICogQG51bV9wYXJhbXM6CW51bWJlciBvZiBwYXJhbWV0ZXJzIHJl dHVybmVkCisgKiBAcGFyYW06CXJldHVybmVkIHBhcmFtZXRlcnMKKyAqCisgKiBSZXR1cm5zIDAg b24gc3VjY2VzcyBvciA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgb3B0ZWVfc3VwcF9zZW5kKHN0 cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgcmV0LCB1MzIgbnVtX3BhcmFtcywKKwkJICAgIHN0 cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYgPSBj dHgtPnRlZWRldjsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dldF9kcnZkYXRhKHRlZWRl dik7CisJc3RydWN0IG9wdGVlX3N1cHAgKnN1cHAgPSAmb3B0ZWUtPnN1cHA7CisJc2l6ZV90IG47 CisJaW50IHJjID0gMDsKKworCS8qCisJICogV2Ugc3RpbGwgaGF2ZSBleGNsdXNpdmUgYWNjZXNz IHRvIHRoZSBkYXRhIHNpbmNlIHRoYXQncyBob3cgd2UKKwkgKiBsZWZ0IGl0IHdoZW4gcmV0dXJu aW5nIGZyb20gb3B0ZWVfc3VwcF9yZWFkKCkuCisJICovCisKKwkvKiBTZWUgY29tbWVudCBvbiBt dXRleCBpbiBvcHRlZV9zdXBwX3JlYWQoKSBhYm92ZSAqLworCW11dGV4X2xvY2soJnN1cHAtPnN1 cHBfbXV0ZXgpOworCisJaWYgKCFzdXBwLT5zdXBwX25leHRfc2VuZCkgeworCQkvKgorCQkgKiBT b21ldGhpbmcgc3RyYW5nZSBpcyBnb2luZyBvbiwgc3VwcGxpY2FudCBzaG91bGRuJ3QKKwkJICog ZW50ZXIgb3B0ZWVfc3VwcF9zZW5kKCkgaW4gdGhpcyBzdGF0ZQorCQkgKi8KKwkJcmMgPSAtRU5P RU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobnVtX3BhcmFtcyAhPSBzdXBwLT5udW1fcGFy YW1zKSB7CisJCS8qCisJCSAqIFNvbWV0aGluZyBpcyB3cm9uZywgbGV0IHN1cHBsaWNhbnQgcmVz dGFydC4gTmV4dCBjYWxsIHRvCisJCSAqIG9wdGVlX3N1cHBfcmVjdigpIHdpbGwgZ2l2ZSBhbiBl cnJvciB0byB0aGUgcmVxdWVzdGluZworCQkgKiB0aHJlYWQgYW5kIHJlbGVhc2UgaXQuCisJCSAq LworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFVwZGF0ZSBvdXQgYW5k IGluL291dCBwYXJhbWV0ZXJzICovCisJZm9yIChuID0gMDsgbiA8IG51bV9wYXJhbXM7IG4rKykg eworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gc3VwcC0+cGFyYW0gKyBuOworCisJCXN3aXRjaCAo cC0+YXR0cikgeworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfT1VUUFVU OgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6CisJCQlwLT51 LnZhbHVlLmEgPSBwYXJhbVtuXS51LnZhbHVlLmE7CisJCQlwLT51LnZhbHVlLmIgPSBwYXJhbVtu XS51LnZhbHVlLmI7CisJCQlwLT51LnZhbHVlLmMgPSBwYXJhbVtuXS51LnZhbHVlLmM7CisJCQli cmVhazsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9PVVRQVVQ6CisJ CWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6CisJCQlwLT51Lm1l bXJlZi5zaXplID0gcGFyYW1bbl0udS5tZW1yZWYuc2l6ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJYnJlYWs7CisJCX0KKwl9CisJc3VwcC0+cmV0ID0gcmV0OworCisJLyogQWxsb3cgb3B0 ZWVfc3VwcF9yZWN2KCkgYWJvdmUgdG8gZG8gaXRzIHdvcmsgKi8KKwlzdXBwLT5zdXBwX25leHRf c2VuZCA9IGZhbHNlOworCisJLyogTGV0IHRoZSByZXF1ZXN0aW5nIHRocmVhZCBjb250aW51ZSAq LworCWNvbXBsZXRlKCZzdXBwLT5kYXRhX2Zyb21fc3VwcCk7CitvdXQ6CisJbXV0ZXhfdW5sb2Nr KCZzdXBwLT5zdXBwX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9Ci0tIAoyLjcuNAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK