From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: [PATCH v2 3/4] Add virtio gpu driver. Date: Wed, 1 Apr 2015 15:15:29 +0200 Message-ID: <1427894130-14228-4-git-send-email-kraxel@redhat.com> References: <1427894130-14228-1-git-send-email-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1427894130-14228-1-git-send-email-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, virtio-dev@lists.oasis-open.org Cc: mst@redhat.com, "open list:ABI/API" , Rusty Russell , open list , "open list:VIRTIO CORE, NET..." , airlied@redhat.com List-Id: linux-api@vger.kernel.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAZ21haWwuY29tPgoKVGhpcyBwYXRjaCBhZGRzIGEg a21zIGRyaXZlciBmb3IgdGhlIHZpcnRpbyBncHUuICBUaGUgeG9yZyBtb2Rlc2V0dGluZwpkcml2 ZXIgY2FuIGhhbmRsZSB0aGUgZGV2aWNlIGp1c3QgZmluZSwgdGhlIGZyYW1lYnVmZmVyIGZvciBm YmNvbiBpcwp0aGVyZSB0b28uCgpRZW11IHBhdGNoZXMgZm9yIHRoZSBob3N0IHNpZGUgYXJlIHVu ZGVyIHJldmlldyBjdXJyZW50bHkuCgpUaGUgcGNpIHZlcnNpb24gb2YgdGhlIGRldmljZSBjb21l cyBpbiB0d28gdmFyaWFudHM6IHdpdGggYW5kIHdpdGhvdXQKdmdhIGNvbXBhdGliaWxpdHkuICBU aGUgZm9ybWVyIGhhcyBhIGV4dHJhIG1lbW9yeSBiYXIgZm9yIHRoZSB2Z2EKZnJhbWVidWZmZXIs IHRoZSBsYXRlciBpcyBhIHB1cmUgdmlydGlvIGRldmljZS4gIFRoZSBvbmx5IGNvbmNlcm4gZm9y CnRoaXMgZHJpdmVyIGlzIHRoYXQgaW4gdGhlIHZpcnRpby12Z2EgY2FzZSB3ZSBoYXZlIHRvIGtp Y2sgb3V0IHRoZQpmaXJtd2FyZSBmcmFtZWJ1ZmZlci4KCkluaXRpYWwgcmV2aXNpb24gaGFzIG9u bHkgMmQgc3VwcG9ydCwgM2QgKHZpcmdsKSBzdXBwb3J0IHJlcXVpcmVzCnNvbWUgbW9yZSB3b3Jr IG9uIHRoZSBxZW11IHNpZGUgYW5kIHdpbGwgYmUgYWRkZWQgbGF0ZXIuCgpTaWduZWQtb2ZmLWJ5 OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBHZXJkIEhv ZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAg ICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnICAgICAgICAg ICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL01ha2VmaWxlICAgICAgICAgIHwgIDEx ICsKIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kZWJ1Z2ZzLmMgfCAgNjQgKysrKwog ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYyB8IDQ4NSArKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcm1fYnVzLmMg fCAgNjcgKysrKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5jICAgICB8IDEz NiArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmggICAgIHwgMzUw ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZiLmMg ICAgICB8IDQzMSArKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlv L3ZpcnRncHVfZmVuY2UuYyAgIHwgMTE5ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92 aXJ0Z3B1X2dlbS5jICAgICB8IDE0MCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfa21zLmMgICAgIHwgMTYzICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfb2JqZWN0LmMgIHwgMTcwICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92 aXJ0Z3B1X3BsYW5lLmMgICB8IDEyMCArKysrKysKIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmly dGdwdV90dG0uYyAgICAgfCA0NjkgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS92aXJ0aW8vdmlydGdwdV92cS5jICAgICAgfCA2MTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBpbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkICAgICAgICAgICAgICAgIHwgICAxICsKIGlu Y2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fZ3B1LmggICAgICAgICAgfCAyMDQgKysrKysrKysrKwog aW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaCAgICAgICAgICB8ICAgMSArCiAyMSBmaWxl cyBjaGFuZ2VkLCAzNTYzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdmlydGlvL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vdmlydGlvL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Zp cnRpby92aXJ0Z3B1X2RlYnVnZnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS92aXJ0aW8vdmlydGdwdV9kaXNwbGF5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vdmlydGlvL3ZpcnRncHVfZHJtX2J1cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZmVuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9rbXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3R0bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp bmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2dwdS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCAxNTFhMDUwLi5mMjM4 OGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwpAQCAtMTk3LDYgKzE5Nyw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJt L3F4bC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ib2Nocy9LY29uZmlnIgog Citzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vS2NvbmZpZyIKKwogc291cmNlICJkcml2 ZXJzL2dwdS9kcm0vbXNtL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggMmMyMzliOS4uMDgzZDQ0MyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAt NjIsNiArNjIsNyBAQCBvYmotJChDT05GSUdfRFJNX09NQVApCSs9IG9tYXBkcm0vCiBvYmotJChD T05GSUdfRFJNX1RJTENEQykJKz0gdGlsY2RjLwogb2JqLSQoQ09ORklHX0RSTV9RWEwpICs9IHF4 bC8KIG9iai0kKENPTkZJR19EUk1fQk9DSFMpICs9IGJvY2hzLworb2JqLSQoQ09ORklHX0RSTV9W SVJUSU9fR1BVKSArPSB2aXJ0aW8vCiBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNtLwogb2Jq LSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0g c3RpLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnIGIvZHJpdmVy cy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjk5ODNlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tj b25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIERSTV9WSVJUSU9fR1BVCisJdHJpc3RhdGUg IlZpcnRpbyBHUFUgZHJpdmVyIgorCWRlcGVuZHMgb24gRFJNICYmIFZJUlRJTworCXNlbGVjdCBG Ql9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19J TUFHRUJMSVQKKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCisgICAgICAgIHNlbGVjdCBE Uk1fS01TX0ZCX0hFTFBFUgorICAgICAgICBzZWxlY3QgRFJNX1RUTQorCWhlbHAKKwkgICBUaGlz IGlzIHRoZSB2aXJ0dWFsIEdQVSBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdp dGgKKyAgICAgICAgICAgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLgorCisJICAg SWYgdW5zdXJlIHNheSBNLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMmVlMTYwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92aXJ0aW8vTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3Ig dGhlIGRybSBkZXZpY2UgZHJpdmVyLiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3Ig dGhlCisjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0 LjEuMCBhbmQgaGlnaGVyLgorCitjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCit2aXJ0aW8t Z3B1LXkgOj0gdmlydGdwdV9kcnYubyB2aXJ0Z3B1X2ttcy5vIHZpcnRncHVfZHJtX2J1cy5vIHZp cnRncHVfZ2VtLm8gXAorCXZpcnRncHVfZmIubyB2aXJ0Z3B1X2Rpc3BsYXkubyB2aXJ0Z3B1X3Zx Lm8gdmlydGdwdV90dG0ubyBcCisJdmlydGdwdV9mZW5jZS5vIHZpcnRncHVfb2JqZWN0Lm8gdmly dGdwdV9kZWJ1Z2ZzLm8gdmlydGdwdV9wbGFuZS5vCisKK29iai0kKENPTkZJR19EUk1fVklSVElP X0dQVSkgKz0gdmlydGlvLWdwdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlv L3ZpcnRncHVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RlYnVn ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjhiNDkxCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RlYnVnZnMuYwpAQCAt MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQsIEluYy4KKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAq ICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv CisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5l eHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBS RVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH SFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAq IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMu aD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorCitzdGF0 aWMgaW50Cit2aXJ0aW9fZ3B1X2RlYnVnZnNfaXJxX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2 b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1f aW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rl diA9IG5vZGUtPm1pbm9yLT5kZXYtPmRldl9wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiZmVu Y2UgJWxkICVsbGRcbiIsCisJCSAgIGF0b21pYzY0X3JlYWQoJnZnZGV2LT5mZW5jZV9kcnYubGFz dF9zZXEpLAorCQkgICB2Z2Rldi0+ZmVuY2VfZHJ2LnN5bmNfc2VxKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHZpcnRpb19ncHVfZGVidWdmc19saXN0W10g PSB7CisJeyAiaXJxX2ZlbmNlIiwgdmlydGlvX2dwdV9kZWJ1Z2ZzX2lycV9pbmZvLCAwLCBOVUxM IH0sCit9OworCisjZGVmaW5lIFZJUlRJT19HUFVfREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUo dmlydGlvX2dwdV9kZWJ1Z2ZzX2xpc3QpCisKK2ludAordmlydGlvX2dwdV9kZWJ1Z2ZzX2luaXQo c3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKHZp cnRpb19ncHVfZGVidWdmc19saXN0LAorCQkJCSBWSVJUSU9fR1BVX0RFQlVHRlNfRU5UUklFUywK KwkJCQkgbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3IpOworCXJldHVybiAwOworfQorCit2b2lk Cit2aXJ0aW9fZ3B1X2RlYnVnZnNfdGFrZWRvd24oc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7 CisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHZpcnRpb19ncHVfZGVidWdmc19saXN0LAorCQkJ CSBWSVJUSU9fR1BVX0RFQlVHRlNfRU5UUklFUywKKwkJCQkgbWlub3IpOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1 L2RybS92aXJ0aW8vdmlydGdwdV9kaXNwbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYTJlY2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0 aW8vdmlydGdwdV9kaXNwbGF5LmMKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMTUgUmVkIEhhdCwgSW5jLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBB dXRob3JzOgorICogICAgRGF2ZSBBaXJsaWUKKyAqICAgIEFsb24gTGV2eQorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1Ig QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgorICovCisKKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorI2luY2x1ZGUgPGRybS9kcm1fY3J0 Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKworI2RlZmlu ZSBYUkVTX01JTiAgIDMyMAorI2RlZmluZSBZUkVTX01JTiAgIDIwMAorCisjZGVmaW5lIFhSRVNf REVGICAxMDI0CisjZGVmaW5lIFlSRVNfREVGICAgNzY4CisKKyNkZWZpbmUgWFJFU19NQVggIDgx OTIKKyNkZWZpbmUgWVJFU19NQVggIDgxOTIKKworc3RhdGljIGludCB2aXJ0aW9fZ3B1X2ZiZGV2 ID0gMTsKKworTU9EVUxFX1BBUk1fREVTQyhmYmRldiwgIkRpc2FibGUvRW5hYmxlIGZyYW1lYnVm ZmVyIGRldmljZSAmIGNvbnNvbGUiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChmYmRldiwgdmlydGlv X2dwdV9mYmRldiwgaW50LCAwNDAwKTsKKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV9jcnRjX2dh bW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgdTE2ICpyZWQsIHUxNiAq Z3JlZW4sIHUxNiAqYmx1ZSwKKwkJCQkgICAgICB1aW50MzJfdCBzdGFydCwgdWludDMyX3Qgc2l6 ZSkKK3sKKwkvKiBUT0RPICovCit9CisKK3N0YXRpYyB2b2lkCit2aXJ0aW9fZ3B1X2hpZGVfY3Vy c29yKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCSAgICAgICBzdHJ1Y3Qgdmly dGlvX2dwdV9vdXRwdXQgKm91dHB1dCkKK3sKKwlvdXRwdXQtPmN1cnNvci5oZHIudHlwZSA9IGNw dV90b19sZTMyKFZJUlRJT19HUFVfQ01EX1VQREFURV9DVVJTT1IpOworCW91dHB1dC0+Y3Vyc29y LnJlc291cmNlX2lkID0gMDsKKwl2aXJ0aW9fZ3B1X2N1cnNvcl9waW5nKHZnZGV2LCBvdXRwdXQp OworfQorCitzdGF0aWMgaW50IHZpcnRpb19ncHVfY3J0Y19jdXJzb3Jfc2V0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkg ICAgICB1aW50MzJfdCBoYW5kbGUsCisJCQkJICAgICAgdWludDMyX3Qgd2lkdGgsCisJCQkJICAg ICAgdWludDMyX3QgaGVpZ2h0LAorCQkJCSAgICAgIGludDMyX3QgaG90X3gsIGludDMyX3QgaG90 X3kpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGNydGMtPmRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRwdXQgPQorCQljb250YWlu ZXJfb2YoY3J0Yywgc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0LCBjcnRjKTsKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKmdvYmogPSBOVUxMOworCXN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqcW9i aiA9IE5VTEw7CisJc3RydWN0IHZpcnRpb19ncHVfZmVuY2UgKmZlbmNlID0gTlVMTDsKKwlpbnQg cmV0ID0gMDsKKworCWlmIChoYW5kbGUgPT0gMCkgeworCQl2aXJ0aW9fZ3B1X2hpZGVfY3Vyc29y KHZnZGV2LCBvdXRwdXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBsb29rdXAgdGhlIGN1cnNv ciAqLworCWdvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoY3J0Yy0+ZGV2LCBmaWxlX3ByaXYs IGhhbmRsZSk7CisJaWYgKGdvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlxb2Jq ID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGdvYmopOworCisJaWYgKCFxb2JqLT5od19yZXNfaGFu ZGxlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXZpcnRpb19ncHVf Y21kX3RyYW5zZmVyX3RvX2hvc3RfMmQodmdkZXYsIHFvYmotPmh3X3Jlc19oYW5kbGUsIDAsCisJ CQkJCSAgIGNwdV90b19sZTMyKDY0KSwKKwkJCQkJICAgY3B1X3RvX2xlMzIoNjQpLAorCQkJCQkg ICAwLCAwLCAmZmVuY2UpOworCisJb3V0cHV0LT5jdXJzb3IuaGRyLnR5cGUgPSBjcHVfdG9fbGUz MihWSVJUSU9fR1BVX0NNRF9VUERBVEVfQ1VSU09SKTsKKwlvdXRwdXQtPmN1cnNvci5yZXNvdXJj ZV9pZCA9IGNwdV90b19sZTMyKHFvYmotPmh3X3Jlc19oYW5kbGUpOworCW91dHB1dC0+Y3Vyc29y LmhvdF94ID0gY3B1X3RvX2xlMzIoaG90X3gpOworCW91dHB1dC0+Y3Vyc29yLmhvdF95ID0gY3B1 X3RvX2xlMzIoaG90X3kpOworCXZpcnRpb19ncHVfY3Vyc29yX3BpbmcodmdkZXYsIG91dHB1dCk7 CisJcmV0ID0gMDsKKworb3V0OgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2Vk KGdvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9jcnRjX2N1 cnNvcl9tb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgaW50IHgsIGludCB5KQor eworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBjcnRjLT5kZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0ID0KKwkJY29udGFpbmVyX29m KGNydGMsIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCwgY3J0Yyk7CisKKwlvdXRwdXQtPmN1cnNv ci5oZHIudHlwZSA9IGNwdV90b19sZTMyKFZJUlRJT19HUFVfQ01EX01PVkVfQ1VSU09SKTsKKwlv dXRwdXQtPmN1cnNvci5wb3MueCA9IGNwdV90b19sZTMyKHgpOworCW91dHB1dC0+Y3Vyc29yLnBv cy55ID0gY3B1X3RvX2xlMzIoeSk7CisJdmlydGlvX2dwdV9jdXJzb3JfcGluZyh2Z2Rldiwgb3V0 cHV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5j cyB2aXJ0aW9fZ3B1X2NydGNfZnVuY3MgPSB7CisJLmN1cnNvcl9zZXQyICAgICAgICAgICAgPSB2 aXJ0aW9fZ3B1X2NydGNfY3Vyc29yX3NldCwKKwkuY3Vyc29yX21vdmUgICAgICAgICAgICA9IHZp cnRpb19ncHVfY3J0Y19jdXJzb3JfbW92ZSwKKwkuZ2FtbWFfc2V0ICAgICAgICAgICAgICA9IHZp cnRpb19ncHVfY3J0Y19nYW1tYV9zZXQsCisJLnNldF9jb25maWcgICAgICAgICAgICAgPSBkcm1f YXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5kZXN0cm95ICAgICAgICAgICAgICAgID0gZHJt X2NydGNfY2xlYW51cCwKKworI2lmIDAgLyogbm90ICh5ZXQpIHdvcmtpbmcgd2l0aG91dCB2Ymxh bmsgc3VwcG9ydCBhY2NvcmRpbmcgdG8gZG9jcyAqLworCS5wYWdlX2ZsaXAgICAgICAgICAgICAg ID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorI2VuZGlmCisJLnJlc2V0ICAgICAgICAg ICAgICAgICAgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlICAgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3Rh dGUsCit9OworCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X3VzZXJfZnJhbWVidWZmZXJfZGVzdHJv eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mcmFt ZWJ1ZmZlciAqdmlydGlvX2dwdV9mYgorCQk9IHRvX3ZpcnRpb19ncHVfZnJhbWVidWZmZXIoZmIp OworCisJaWYgKHZpcnRpb19ncHVfZmItPm9iaikKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVu Y2VfdW5sb2NrZWQodmlydGlvX2dwdV9mYi0+b2JqKTsKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51 cChmYik7CisJa2ZyZWUodmlydGlvX2dwdV9mYik7Cit9CisKK3N0YXRpYyBpbnQKK3ZpcnRpb19n cHVfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK KwkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICAgdW5zaWduZWQg ZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNs aXBzLAorCQkJCSAgICAgdW5zaWduZWQgbnVtX2NsaXBzKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1 X2ZyYW1lYnVmZmVyICp2aXJ0aW9fZ3B1X2ZiCisJCT0gdG9fdmlydGlvX2dwdV9mcmFtZWJ1ZmZl cihmYik7CisKKwlyZXR1cm4gdmlydGlvX2dwdV9zdXJmYWNlX2RpcnR5KHZpcnRpb19ncHVfZmIs IGNsaXBzLCBudW1fY2xpcHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlcl9mdW5jcyB2aXJ0aW9fZ3B1X2ZiX2Z1bmNzID0geworCS5kZXN0cm95ID0gdmlydGlvX2dw dV91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3ksCisJLmRpcnR5ID0gdmlydGlvX2dwdV9mcmFtZWJ1 ZmZlcl9zdXJmYWNlX2RpcnR5LAorfTsKKworaW50Cit2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgdmlydGlvX2dwdV9mcmFt ZWJ1ZmZlciAqdmdmYiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQs CisJCQkgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50IHJldDsKKwlzdHJ1 Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvOworCXZnZmItPm9iaiA9IG9iajsKKworCWJvID0gZ2Vt X3RvX3ZpcnRpb19ncHVfb2JqKG9iaik7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChk ZXYsICZ2Z2ZiLT5iYXNlLCAmdmlydGlvX2dwdV9mYl9mdW5jcyk7CisJaWYgKHJldCkgeworCQl2 Z2ZiLT5vYmogPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1faGVscGVyX21vZGVfZmls bF9mYl9zdHJ1Y3QoJnZnZmItPmJhc2UsIG1vZGVfY21kKTsKKworCXNwaW5fbG9ja19pbml0KCZ2 Z2ZiLT5kaXJ0eV9sb2NrKTsKKwl2Z2ZiLT54MSA9IHZnZmItPnkxID0gSU5UX01BWDsKKwl2Z2Zi LT54MiA9IHZnZmItPnkyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgdmlydGlv X2dwdV9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyB2b2lkIHZpcnRpb19ncHVfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCB2 aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2aXJ0 aW9fZ3B1X291dHB1dCAqb3V0cHV0ID0gZHJtX2NydGNfdG9fdmlydGlvX2dwdV9vdXRwdXQoY3J0 Yyk7CisKKwl2aXJ0aW9fZ3B1X2NtZF9zZXRfc2Nhbm91dCh2Z2Rldiwgb3V0cHV0LT5pbmRleCwg MCwKKwkJCQkgICBjcnRjLT5tb2RlLmhkaXNwbGF5LAorCQkJCSAgIGNydGMtPm1vZGUudmRpc3Bs YXksIDAsIDApOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NydGNfZW5hYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKK3sKK30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV9jcnRjX2Rp c2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRwdXQgPSBkcm1fY3J0Y190 b192aXJ0aW9fZ3B1X291dHB1dChjcnRjKTsKKworCXZpcnRpb19ncHVfY21kX3NldF9zY2Fub3V0 KHZnZGV2LCBvdXRwdXQtPmluZGV4LCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCB2 aXJ0aW9fZ3B1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgdmlydGlvX2dwdV9jcnRjX2hlbHBl cl9mdW5jcyA9IHsKKwkuZW5hYmxlICAgICAgICA9IHZpcnRpb19ncHVfY3J0Y19lbmFibGUsCisJ LmRpc2FibGUgICAgICAgPSB2aXJ0aW9fZ3B1X2NydGNfZGlzYWJsZSwKKwkubW9kZV9maXh1cCAg ICA9IHZpcnRpb19ncHVfY3J0Y19tb2RlX2ZpeHVwLAorCS5tb2RlX3NldF9ub2ZiID0gdmlydGlv X2dwdV9jcnRjX21vZGVfc2V0X25vZmIsCisJLmF0b21pY19jaGVjayAgPSB2aXJ0aW9fZ3B1X2Ny dGNfYXRvbWljX2NoZWNrLAorfTsKKworc3RhdGljIGJvb2wgdmlydGlvX2dwdV9lbmNfbW9kZV9m aXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHZp cnRpb19ncHVfZW5jX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1 X2VuY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMg dm9pZCB2aXJ0aW9fZ3B1X2VuY19kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKK30KKworc3RhdGljIGludCB2aXJ0aW9fZ3B1X2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRw dXQgPQorCQlkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KGNvbm5lY3Rvcik7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOworCWludCBjb3VudCwgd2lkdGgs IGhlaWdodDsKKworCXdpZHRoICA9IGxlMzJfdG9fY3B1KG91dHB1dC0+aW5mby5yLndpZHRoKTsK KwloZWlnaHQgPSBsZTMyX3RvX2NwdShvdXRwdXQtPmluZm8uci5oZWlnaHQpOworCWNvdW50ID0g ZHJtX2FkZF9tb2Rlc19ub2VkaWQoY29ubmVjdG9yLCBYUkVTX01BWCwgWVJFU19NQVgpOworCisJ aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsKKwkJd2lkdGggPSBYUkVTX0RFRjsKKwkJ aGVpZ2h0ID0gWVJFU19ERUY7CisJCWRybV9zZXRfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCBY UkVTX0RFRiwgWVJFU19ERUYpOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiYWRkIG1vZGU6ICVk eCVkXG4iLCB3aWR0aCwgaGVpZ2h0KTsKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShjb25uZWN0b3It PmRldiwgd2lkdGgsIGhlaWdodCwgNjAsCisJCQkJICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwor CQltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQlkcm1fbW9kZV9wcm9i ZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50 OworfQorCitzdGF0aWMgaW50IHZpcnRpb19ncHVfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCit7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRwdXQgPQorCQlkcm1fY29u bmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KGNvbm5lY3Rvcik7CisJaW50IHdpZHRoLCBoZWln aHQ7CisKKwl3aWR0aCAgPSBsZTMyX3RvX2NwdShvdXRwdXQtPmluZm8uci53aWR0aCk7CisJaGVp Z2h0ID0gbGUzMl90b19jcHUob3V0cHV0LT5pbmZvLnIuaGVpZ2h0KTsKKworCWlmICghKG1vZGUt PnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkpCisJCXJldHVybiBNT0RFX09LOworCWlm IChtb2RlLT5oZGlzcGxheSA9PSBYUkVTX0RFRiAmJiBtb2RlLT52ZGlzcGxheSA9PSBZUkVTX0RF RikKKwkJcmV0dXJuIE1PREVfT0s7CisJaWYgKG1vZGUtPmhkaXNwbGF5IDw9IHdpZHRoICAmJiBt b2RlLT5oZGlzcGxheSA+PSB3aWR0aCAtIDE2ICYmCisJICAgIG1vZGUtPnZkaXNwbGF5IDw9IGhl aWdodCAmJiBtb2RlLT52ZGlzcGxheSA+PSBoZWlnaHQgLSAxNikKKwkJcmV0dXJuIE1PREVfT0s7 CisKKwlEUk1fREVCVUcoImRlbCBtb2RlOiAlZHglZFxuIiwgbW9kZS0+aGRpc3BsYXksIG1vZGUt PnZkaXNwbGF5KTsKKwlyZXR1cm4gTU9ERV9CQUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Vu Y29kZXIqCit2aXJ0aW9fZ3B1X2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqdmlydGlvX2dwdV9vdXRwdXQg PQorCQlkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwly ZXR1cm4gJnZpcnRpb19ncHVfb3V0cHV0LT5lbmM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZpcnRpb19ncHVfZW5jX2hlbHBlcl9mdW5jcyA9IHsK KwkubW9kZV9maXh1cCA9IHZpcnRpb19ncHVfZW5jX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ICAg PSB2aXJ0aW9fZ3B1X2VuY19tb2RlX3NldCwKKwkuZW5hYmxlICAgICA9IHZpcnRpb19ncHVfZW5j X2VuYWJsZSwKKwkuZGlzYWJsZSAgICA9IHZpcnRpb19ncHVfZW5jX2Rpc2FibGUsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHZpcnRpb19ncHVf Y29ubl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyAgICA9IHZpcnRpb19ncHVfY29ubl9n ZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgICA9IHZpcnRpb19ncHVfY29ubl9tb2RlX3ZhbGlkLAor CS5iZXN0X2VuY29kZXIgPSB2aXJ0aW9fZ3B1X2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyB2 b2lkIHZpcnRpb19ncHVfY29ubl9zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJRFJNX0RFQlVHKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2Nvbm5f cmVzdG9yZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCURSTV9ERUJVRygi XG4iKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgdmlydGlvX2dwdV9j b25uX2RldGVjdCgKKwkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlib29s IGZvcmNlKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0ID0KKwkJZHJtX2Nv bm5lY3Rvcl90b192aXJ0aW9fZ3B1X291dHB1dChjb25uZWN0b3IpOworCisJaWYgKG91dHB1dC0+ aW5mby5lbmFibGVkKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxz ZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2 b2lkIHZpcnRpb19ncHVfY29ubl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICp2aXJ0aW9fZ3B1X291dHB1dCA9CisJ CWRybV9jb25uZWN0b3JfdG9fdmlydGlvX2dwdV9vdXRwdXQoY29ubmVjdG9yKTsKKworCWRybV9j b25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChj b25uZWN0b3IpOworCWtmcmVlKHZpcnRpb19ncHVfb3V0cHV0KTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZpcnRpb19ncHVfY29ubmVjdG9yX2Z1bmNzID0g eworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLnNhdmUgPSB2 aXJ0aW9fZ3B1X2Nvbm5fc2F2ZSwKKwkucmVzdG9yZSA9IHZpcnRpb19ncHVfY29ubl9yZXN0b3Jl LAorCS5kZXRlY3QgPSB2aXJ0aW9fZ3B1X2Nvbm5fZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJt X2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gdmlydGlv X2dwdV9jb25uX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgdmlydGlvX2dwdV9lbmNfZnVuY3MgPSB7CisJLmRlc3Ry b3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCB2Z2Rldl9vdXRwdXRf aW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LCBpbnQgaW5kZXgpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHZnZGV2LT5kZGV2OworCXN0cnVjdCB2aXJ0aW9fZ3B1X291 dHB1dCAqb3V0cHV0ID0gdmdkZXYtPm91dHB1dHMgKyBpbmRleDsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yID0gJm91dHB1dC0+Y29ubjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIgPSAmb3V0cHV0LT5lbmM7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm91dHB1dC0+ Y3J0YzsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKworCW91dHB1dC0+aW5kZXggPSBpbmRl eDsKKwlpZiAoaW5kZXggPT0gMCkgeworCQlvdXRwdXQtPmluZm8uZW5hYmxlZCA9IGNwdV90b19s ZTMyKHRydWUpOworCQlvdXRwdXQtPmluZm8uci53aWR0aCA9IGNwdV90b19sZTMyKFhSRVNfREVG KTsKKwkJb3V0cHV0LT5pbmZvLnIuaGVpZ2h0ID0gY3B1X3RvX2xlMzIoWVJFU19ERUYpOworCX0K KworCXBsYW5lID0gdmlydGlvX2dwdV9wbGFuZV9pbml0KHZnZGV2LCBpbmRleCk7CisJaWYgKElT X0VSUihwbGFuZSkpCisJCXJldHVybiBQVFJfRVJSKHBsYW5lKTsKKwlkcm1fY3J0Y19pbml0X3dp dGhfcGxhbmVzKGRldiwgY3J0YywgcGxhbmUsIE5VTEwsCisJCQkJICAmdmlydGlvX2dwdV9jcnRj X2Z1bmNzKTsKKwlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNydGMsIDI1Nik7CisJZHJt X2NydGNfaGVscGVyX2FkZChjcnRjLCAmdmlydGlvX2dwdV9jcnRjX2hlbHBlcl9mdW5jcyk7CisJ cGxhbmUtPmNydGMgPSBjcnRjOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9y LCAmdmlydGlvX2dwdV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1Jf VklSVFVBTCk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnZpcnRpb19n cHVfY29ubl9oZWxwZXJfZnVuY3MpOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIs ICZ2aXJ0aW9fZ3B1X2VuY19mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX1ZJUlRVQUwpOwor CWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnZpcnRpb19ncHVfZW5jX2hlbHBlcl9m dW5jcyk7CisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAxIDw8IGluZGV4OworCisJZHJtX21v ZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisJZHJtX2Nv bm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0b3IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqCit2aXJ0aW9fZ3B1X3VzZXJfZnJhbWVidWZmZXJfY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsCisJCQkJICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQoreworCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mcmFtZWJ1 ZmZlciAqdmlydGlvX2dwdV9mYjsKKwlpbnQgcmV0OworCisJLyogbG9va3VwIG9iamVjdCBhc3Nv Y2lhdGVkIHdpdGggcmVzIGhhbmRsZSAqLworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChk ZXYsIGZpbGVfcHJpdiwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOworCWlmICghb2JqKQorCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXZpcnRpb19ncHVfZmIgPSBremFsbG9jKHNpemVvZigq dmlydGlvX2dwdV9mYiksIEdGUF9LRVJORUwpOworCWlmICh2aXJ0aW9fZ3B1X2ZiID09IE5VTEwp CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gdmlydGlvX2dwdV9mcmFtZWJ1 ZmZlcl9pbml0KGRldiwgdmlydGlvX2dwdV9mYiwgbW9kZV9jbWQsIG9iaik7CisJaWYgKHJldCkg eworCQlrZnJlZSh2aXJ0aW9fZ3B1X2ZiKTsKKwkJaWYgKG9iaikKKwkJCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVy biAmdmlydGlvX2dwdV9mYi0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9jb25maWdfZnVuY3MgdmlydGlvX2dwdV9tb2RlX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSB2 aXJ0aW9fZ3B1X3VzZXJfZnJhbWVidWZmZXJfY3JlYXRlLAorCS5hdG9taWNfY2hlY2sgPSBkcm1f YXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVy X2NvbW1pdCwKK307CisKK2ludCB2aXJ0aW9fZ3B1X21vZGVzZXRfaW5pdChzdHJ1Y3QgdmlydGlv X2dwdV9kZXZpY2UgKnZnZGV2KQoreworCWludCBpLCByZXQ7CisKKwlkcm1fbW9kZV9jb25maWdf aW5pdCh2Z2Rldi0+ZGRldik7CisJdmdkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gKHZv aWQgKikmdmlydGlvX2dwdV9tb2RlX2Z1bmNzOworCisJLyogbW9kZXMgd2lsbCBiZSB2YWxpZGF0 ZWQgYWdhaW5zdCB0aGUgZnJhbWVidWZmZXIgc2l6ZSAqLworCXZnZGV2LT5kZGV2LT5tb2RlX2Nv bmZpZy5taW5fd2lkdGggPSBYUkVTX01JTjsKKwl2Z2Rldi0+ZGRldi0+bW9kZV9jb25maWcubWlu X2hlaWdodCA9IFlSRVNfTUlOOworCXZnZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg PSBYUkVTX01BWDsKKwl2Z2Rldi0+ZGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IFlSRVNf TUFYOworCisJZm9yIChpID0gMCA7IGkgPCB2Z2Rldi0+bnVtX3NjYW5vdXRzOyArK2kpCisJCXZn ZGV2X291dHB1dF9pbml0KHZnZGV2LCBpKTsKKworICAgICAgICBkcm1fbW9kZV9jb25maWdfcmVz ZXQodmdkZXYtPmRkZXYpOworCisJaWYgKHZpcnRpb19ncHVfZmJkZXYpIHsKKwkJcmV0ID0gdmly dGlvX2dwdV9mYmRldl9pbml0KHZnZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmlydGlvX2dwdV9tb2Rlc2V0X2Zpbmkoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldikKK3sKKwl2aXJ0aW9fZ3B1X2ZiZGV2X2Zpbmkodmdk ZXYpOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKHZnZGV2LT5kZGV2KTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcm1fYnVzLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmlydGlvL3ZpcnRncHVfZHJtX2J1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjU2YmQ0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmly dGlvL3ZpcnRncHVfZHJtX2J1cy5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMTUgUmVkIEhhdCwgSW5jLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0 aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICog ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVS UyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLwor CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorCitp bnQgZHJtX3ZpcnRpb19zZXRfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsK KworCWlmIChwZGV2KSB7CisJCXJldHVybiBkcm1fcGNpX3NldF9idXNpZChkZXYsIG1hc3Rlcik7 CisJfQorCXJldHVybiAwOworfQorCitpbnQgZHJtX3ZpcnRpb19pbml0KHN0cnVjdCBkcm1fZHJp dmVyICpkcml2ZXIsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWRldiA9IGRybV9kZXZfYWxsb2MoZHJpdmVyLCAm dmRldi0+ZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT52aXJ0ZGV2 ID0gdmRldjsKKwl2ZGV2LT5wcml2ID0gZGV2OworCisJaWYgKHN0cmNtcCh2ZGV2LT5kZXYucGFy ZW50LT5idXMtPm5hbWUsICJwY2kiKSA9PSAwKQorCQlkZXYtPnBkZXYgPSB0b19wY2lfZGV2KHZk ZXYtPmRldi5wYXJlbnQpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3RlcihkZXYsIDApOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQu JWQuJWQgJXMgb24gbWlub3IgJWRcbiIsIGRyaXZlci0+bmFtZSwKKwkJIGRyaXZlci0+bWFqb3Is IGRyaXZlci0+bWlub3IsIGRyaXZlci0+cGF0Y2hsZXZlbCwKKwkJIGRyaXZlci0+ZGF0ZSwgZGV2 LT5wcmltYXJ5LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJZHJtX2Rldl91 bnJlZihkZXYpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmlydGlvL3ZpcnRncHVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5NjEwYQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuYwpAQCAtMCwwICsx LDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBSZWQgSGF0LCBJbmMuCisgKiBBbGwg UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEYXZlIEFpcmxpZSA8YWly bGllZEByZWRoYXQuY29tPgorICogICAgR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+ CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZBIExJTlVYIFNZU1RFTVMgQU5EL09SIElUUyBTVVBQTElF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4K KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJt L2RybS5oIgorCisjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ry aXZlciBkcml2ZXI7CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9tb2Rlc2V0ID0gLTE7CisKK01P RFVMRV9QQVJNX0RFU0MobW9kZXNldCwgIkRpc2FibGUvRW5hYmxlIG1vZGVzZXR0aW5nIik7Citt b2R1bGVfcGFyYW1fbmFtZWQobW9kZXNldCwgdmlydGlvX2dwdV9tb2Rlc2V0LCBpbnQsIDA0MDAp OworCitzdGF0aWMgaW50IHZpcnRpb19ncHVfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZk ZXYpCit7CisjaWZkZWYgQ09ORklHX1ZHQV9DT05TT0xFCisJaWYgKHZnYWNvbl90ZXh0X2ZvcmNl KCkgJiYgdmlydGlvX2dwdV9tb2Rlc2V0ID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRp ZgorCisJaWYgKHZpcnRpb19ncHVfbW9kZXNldCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXJldHVybiBkcm1fdmlydGlvX2luaXQoJmRyaXZlciwgdmRldik7Cit9CisKK3N0YXRpYyB2b2lk IHZpcnRpb19ncHVfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSB2ZGV2LT5wcml2OworCWRybV9wdXRfZGV2KGRldik7Cit9CisK K3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHZkZXYtPnByaXY7CisJc3Ry dWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzY2hl ZHVsZV93b3JrKCZ2Z2Rldi0+Y29uZmlnX2NoYW5nZWRfd29yayk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVklSVElPX0lEX0dQVSwgVklS VElPX0RFVl9BTllfSUQgfSwKKwl7IDAgfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmVh dHVyZXNbXSA9IHsKK307CitzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2dwdV9k cml2ZXIgPSB7CisJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKKwkuZmVhdHVyZV90YWJsZV9z aXplID0gQVJSQVlfU0laRShmZWF0dXJlcyksCisJLmRyaXZlci5uYW1lID0gS0JVSUxEX01PRE5B TUUsCisJLmRyaXZlci5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZF90YWJsZSA9IGlkX3RhYmxl LAorCS5wcm9iZSA9IHZpcnRpb19ncHVfcHJvYmUsCisJLnJlbW92ZSA9IHZpcnRpb19ncHVfcmVt b3ZlLAorCS5jb25maWdfY2hhbmdlZCA9IHZpcnRpb19ncHVfY29uZmlnX2NoYW5nZWQKK307CisK K21vZHVsZV92aXJ0aW9fZHJpdmVyKHZpcnRpb19ncHVfZHJpdmVyKTsKKworTU9EVUxFX0RFVklD RV9UQUJMRSh2aXJ0aW8sIGlkX3RhYmxlKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmlydGlvIEdQ VSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7 CitNT0RVTEVfQVVUSE9SKCJEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPiIpOworTU9E VUxFX0FVVEhPUigiR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+Iik7CitNT0RVTEVf QVVUSE9SKCJBbG9uIExldnkiKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgdmlydGlvX2dwdV9kcml2ZXJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwku b3BlbiA9IGRybV9vcGVuLAorCS5tbWFwID0gdmlydGlvX2dwdV9tbWFwLAorCS5wb2xsID0gZHJt X3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwKKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGws CisJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBh dF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9vcF9sbHNl ZWssCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CisJLmRyaXZl cl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSwKKwkuc2V0X2J1c2lkID0g ZHJtX3ZpcnRpb19zZXRfYnVzaWQsCisJLmxvYWQgPSB2aXJ0aW9fZ3B1X2RyaXZlcl9sb2FkLAor CS51bmxvYWQgPSB2aXJ0aW9fZ3B1X2RyaXZlcl91bmxvYWQsCisKKwkuZHVtYl9jcmVhdGUgPSB2 aXJ0aW9fZ3B1X21vZGVfZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IHZpcnRpb19n cHVfbW9kZV9kdW1iX21tYXAsCisJLmR1bWJfZGVzdHJveSA9IHZpcnRpb19ncHVfbW9kZV9kdW1i X2Rlc3Ryb3ksCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwkuZGVidWdmc19pbml0 ID0gdmlydGlvX2dwdV9kZWJ1Z2ZzX2luaXQsCisJLmRlYnVnZnNfY2xlYW51cCA9IHZpcnRpb19n cHVfZGVidWdmc190YWtlZG93biwKKyNlbmRpZgorCisJLmdlbV9mcmVlX29iamVjdCA9IHZpcnRp b19ncHVfZ2VtX2ZyZWVfb2JqZWN0LAorCS5mb3BzID0gJnZpcnRpb19ncHVfZHJpdmVyX2ZvcHMs CisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUg PSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVS X01JTk9SLAorCS5wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUwsCit9OwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby92aXJ0Z3B1X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmU1YTJjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRn cHVfZHJ2LmgKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmVk IEhhdCwgSW5jLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcK KyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisg KiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQorICogTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFZJ UlRJT19EUlZfSAorI2RlZmluZSBWSVJUSU9fRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZpcnRp by5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0 aW9fY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2dwdS5oPgorCisjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDx0dG0vdHRtX2JvX2FwaS5oPgorI2luY2x1ZGUgPHR0 bS90dG1fYm9fZHJpdmVyLmg+CisjaW5jbHVkZSA8dHRtL3R0bV9wbGFjZW1lbnQuaD4KKyNpbmNs dWRlIDx0dG0vdHRtX21vZHVsZS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ2aXJ0aW9fZ3B1 IgorI2RlZmluZSBEUklWRVJfREVTQyAidmlydGlvIEdQVSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUg IjAiCisKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDAKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDAKKyNk ZWZpbmUgRFJJVkVSX1BBVENITEVWRUwgMQorCisvKiB2aXJ0Z3B1X2RybV9idXMuYyAqLworaW50 IGRybV92aXJ0aW9fc2V0X2J1c2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f bWFzdGVyICptYXN0ZXIpOworaW50IGRybV92aXJ0aW9faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAq ZHJpdmVyLCBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7CisKK3N0cnVjdCB2aXJ0aW9fZ3B1 X29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGdlbV9iYXNlOworCXVpbnQzMl90IGh3 X3Jlc19oYW5kbGU7CisKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCXZvaWQgKnZtYXA7CisJ Ym9vbCBkdW1iOworCXN0cnVjdCB0dG1fcGxhY2UgICAgICAgICAgICAgICAgcGxhY2VtZW50X2Nv ZGU7CisJc3RydWN0IHR0bV9wbGFjZW1lbnQJCXBsYWNlbWVudDsKKwlzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QJdGJvOworCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoJCWttYXA7Cit9OworI2RlZmlu ZSBnZW1fdG9fdmlydGlvX2dwdV9vYmooZ29iaikgXAorCWNvbnRhaW5lcl9vZigoZ29iaiksIHN0 cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCwgZ2VtX2Jhc2UpCisKK3N0cnVjdCB2aXJ0aW9fZ3B1X3Zi dWZmZXI7CitzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2U7CisKK3R5cGVkZWYgdm9pZCAoKnZpcnRp b19ncHVfcmVzcF9jYikoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkgICBz dHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmKTsKKworc3RydWN0IHZpcnRpb19ncHVfZmVu Y2VfZHJpdmVyIHsKKwlhdG9taWM2NF90ICAgICAgIGxhc3Rfc2VxOworCXVpbnQ2NF90ICAgICAg ICAgc3luY19zZXE7CisJc3RydWN0IGxpc3RfaGVhZCBmZW5jZXM7CisJc3BpbmxvY2tfdCAgICAg ICBsb2NrOworfTsKKworc3RydWN0IHZpcnRpb19ncHVfZmVuY2UgeworCXN0cnVjdCBmZW5jZSBm OworCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlX2RyaXZlciAqZHJ2OworCXN0cnVjdCBsaXN0X2hl YWQgbm9kZTsKKwl1aW50NjRfdCBzZXE7Cit9OworI2RlZmluZSB0b192aXJ0aW9fZmVuY2UoeCkg XAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSwgZikKKworc3RydWN0 IHZpcnRpb19ncHVfdmJ1ZmZlciB7CisJY2hhciAqYnVmOworCWludCBzaXplOworCisJdm9pZCAq ZGF0YV9idWY7CisJdWludDMyX3QgZGF0YV9zaXplOworCisJY2hhciAqcmVzcF9idWY7CisJaW50 IHJlc3Bfc2l6ZTsKKworCXZpcnRpb19ncHVfcmVzcF9jYiByZXNwX2NiOworCisJc3RydWN0IGxp c3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0IHsKKwlpbnQgaW5k ZXg7CisJc3RydWN0IGRybV9jcnRjIGNydGM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsK KwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jOworCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rpc3BsYXlfb25l IGluZm87CisJc3RydWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciBjdXJzb3I7CisJaW50IGN1 cl94OworCWludCBjdXJfeTsKK307CisjZGVmaW5lIGRybV9jcnRjX3RvX3ZpcnRpb19ncHVfb3V0 cHV0KHgpIFwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0LCBjcnRj KQorI2RlZmluZSBkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KHgpIFwKKwljb250 YWluZXJfb2YoeCwgc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0LCBjb25uKQorI2RlZmluZSBkcm1f ZW5jb2Rlcl90b192aXJ0aW9fZ3B1X291dHB1dCh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVj dCB2aXJ0aW9fZ3B1X291dHB1dCwgZW5jKQorCitzdHJ1Y3QgdmlydGlvX2dwdV9mcmFtZWJ1ZmZl ciB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqOworCWludCB4MSwgeTEsIHgyLCB5MjsgLyogZGlydHkgcmVjdCAqLworCXNwaW5sb2Nr X3QgZGlydHlfbG9jazsKKwl1aW50MzJfdCBod19yZXNfaGFuZGxlOworfTsKKyNkZWZpbmUgdG9f dmlydGlvX2dwdV9mcmFtZWJ1ZmZlcih4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2aXJ0 aW9fZ3B1X2ZyYW1lYnVmZmVyLCBiYXNlKQorCitzdHJ1Y3QgdmlydGlvX2dwdV9tbWFuIHsKKwlz dHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgICAgICAgIGJvX2dsb2JhbF9yZWY7CisJc3RydWN0IGRy bV9nbG9iYWxfcmVmZXJlbmNlCW1lbV9nbG9iYWxfcmVmOworCWJvb2wJCQkJbWVtX2dsb2JhbF9y ZWZlcmVuY2VkOworCXN0cnVjdCB0dG1fYm9fZGV2aWNlCQliZGV2OworfTsKKworc3RydWN0IHZp cnRpb19ncHVfZmJkZXY7CisKK3N0cnVjdCB2aXJ0aW9fZ3B1X3F1ZXVlIHsKKwlzdHJ1Y3Qgdmly dHF1ZXVlICp2cTsKKwlzcGlubG9ja190IHFsb2NrOworCXdhaXRfcXVldWVfaGVhZF90IGFja19x dWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVxdWV1ZV93b3JrOworfTsKKworc3RydWN0IHZp cnRpb19ncHVfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRkZXY7CisKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKworCXN0cnVjdCB2aXJ0 aW9fZ3B1X21tYW4gbW1hbjsKKworCS8qIHBvaW50ZXIgdG8gZmJkZXYgaW5mbyBzdHJ1Y3R1cmUg Ki8KKwlzdHJ1Y3QgdmlydGlvX2dwdV9mYmRldiAqdmdmYmRldjsKKwlzdHJ1Y3QgdmlydGlvX2dw dV9vdXRwdXQgb3V0cHV0c1tWSVJUSU9fR1BVX01BWF9TQ0FOT1VUU107CisJdWludDMyX3QgbnVt X3NjYW5vdXRzOworCisJc3RydWN0IHZpcnRpb19ncHVfcXVldWUgY3RybHE7CisJc3RydWN0IHZp cnRpb19ncHVfcXVldWUgY3Vyc29ycTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfdmJ1ZnM7CisJ dm9pZCAqdmJ1ZnM7CisJYm9vbCB2cXNfcmVhZHk7CisKKwlzdHJ1Y3QgaWRyCXJlc291cmNlX2lk cjsKKwlzcGlubG9ja190IHJlc291cmNlX2lkcl9sb2NrOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qg cmVzcF93cTsKKwkvKiBjdXJyZW50IGRpc3BsYXkgaW5mbyAqLworCXNwaW5sb2NrX3QgZGlzcGxh eV9pbmZvX2xvY2s7CisKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZV9kcml2ZXIgZmVuY2VfZHJ2 OworCisJc3RydWN0IGlkcgljdHhfaWRfaWRyOworCXNwaW5sb2NrX3QgY3R4X2lkX2lkcl9sb2Nr OworCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbmZpZ19jaGFuZ2VkX3dvcms7Cit9OworCitzdHJ1 Y3QgdmlydGlvX2dwdV9mcHJpdiB7CisJdWludDMyX3QgY3R4X2lkOworfTsKKworLyogdmlydGlv X2lvY3RsLmMgKi8KKyNkZWZpbmUgRFJNX1ZJUlRJT19OVU1fSU9DVExTIDEwCitleHRlcm4gc3Ry dWN0IGRybV9pb2N0bF9kZXNjIHZpcnRpb19ncHVfaW9jdGxzW0RSTV9WSVJUSU9fTlVNX0lPQ1RM U107CisKKy8qIHZpcnRpb19rbXMuYyAqLworaW50IHZpcnRpb19ncHVfZHJpdmVyX2xvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgdmlydGlvX2dw dV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKiB2aXJ0aW9fZ2Vt LmMgKi8KK3ZvaWQgdmlydGlvX2dwdV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpnZW1fb2JqKTsKK2ludCB2aXJ0aW9fZ3B1X2dlbV9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYpOwordm9pZCB2aXJ0aW9fZ3B1X2dlbV9maW5pKHN0cnVjdCB2aXJ0aW9f Z3B1X2RldmljZSAqdmdkZXYpOworaW50IHZpcnRpb19ncHVfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUsCisJCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHVpbnQ2NF90 IHNpemUsCisJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9ial9wLAorCQkJICB1aW50MzJf dCAqaGFuZGxlX3ApOworc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICp2aXJ0aW9fZ3B1X2FsbG9j X29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICBzaXplX3Qgc2l6ZSwgYm9v bCBrZXJuZWwsCisJCQkJCQkgIGJvb2wgcGlubmVkKTsKK2ludCB2aXJ0aW9fZ3B1X21vZGVfZHVt Yl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IHZp cnRpb19ncHVfbW9kZV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJ CQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJIHVpbnQzMl90IGhhbmRsZSk7CitpbnQg dmlydGlvX2dwdV9tb2RlX2R1bWJfbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJ CSAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICB1aW50MzJfdCBoYW5kbGUs IHVpbnQ2NF90ICpvZmZzZXRfcCk7CisKKy8qIHZpcnRpb19mYiAqLworI2RlZmluZSBWSVJUSU9f R1BVRkJfQ09OTl9MSU1JVCAxCitpbnQgdmlydGlvX2dwdV9mYmRldl9pbml0KHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYpOwordm9pZCB2aXJ0aW9fZ3B1X2ZiZGV2X2Zpbmkoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rldik7CitpbnQgdmlydGlvX2dwdV9zdXJmYWNlX2RpcnR5 KHN0cnVjdCB2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyICpxZmIsCisJCQkgICAgIHN0cnVjdCBkcm1f Y2xpcF9yZWN0ICpjbGlwcywKKwkJCSAgICAgdW5zaWduZWQgbnVtX2NsaXBzKTsKKy8qIHZpcnRp byB2ZyAqLworaW50IHZpcnRpb19ncHVfYWxsb2NfdmJ1ZnMoc3RydWN0IHZpcnRpb19ncHVfZGV2 aWNlICp2Z2Rldik7Cit2b2lkIHZpcnRpb19ncHVfZnJlZV92YnVmcyhzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2KTsKK3ZvaWQgdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgICAgICB1aW50MzJfdCAqcmVzaWQpOwor dm9pZCB2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX3B1dChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ug KnZnZGV2LCB1aW50MzJfdCBpZCk7Cit2b2lkIHZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJj ZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJCSAgICB1aW50MzJfdCByZXNv dXJjZV9pZCwKKwkJCQkgICAgdWludDMyX3QgZm9ybWF0LAorCQkJCSAgICB1aW50MzJfdCB3aWR0 aCwKKwkJCQkgICAgdWludDMyX3QgaGVpZ2h0KTsKK3ZvaWQgdmlydGlvX2dwdV9jbWRfdW5yZWZf cmVzb3VyY2Uoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkgICB1aW50MzJf dCByZXNvdXJjZV9pZCk7Cit2b2lkIHZpcnRpb19ncHVfY21kX3RyYW5zZmVyX3RvX2hvc3RfMmQo c3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJdWludDMyX3QgcmVzb3VyY2Vf aWQsIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkJX19sZTMyIHdpZHRoLCBfX2xlMzIgaGVpZ2h0LAor CQkJCQlfX2xlMzIgeCwgX19sZTMyIHksCisJCQkJCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICoq ZmVuY2UpOwordm9pZCB2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9mbHVzaChzdHJ1Y3QgdmlydGlv X2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJCSAgIHVpbnQzMl90IHJlc291cmNlX2lkLAorCQkJCSAg IHVpbnQzMl90IHgsIHVpbnQzMl90IHksCisJCQkJICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90 IGhlaWdodCk7Cit2b2lkIHZpcnRpb19ncHVfY21kX3NldF9zY2Fub3V0KHN0cnVjdCB2aXJ0aW9f Z3B1X2RldmljZSAqdmdkZXYsCisJCQkJdWludDMyX3Qgc2Nhbm91dF9pZCwgdWludDMyX3QgcmVz b3VyY2VfaWQsCisJCQkJdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCQl1aW50 MzJfdCB4LCB1aW50MzJfdCB5KTsKK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9hdHRhY2goc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgICAgc3RydWN0IHZpcnRpb19ncHVfb2Jq ZWN0ICpvYmosCisJCQkgICAgIHVpbnQzMl90IHJlc291cmNlX2lkLAorCQkJICAgICBzdHJ1Y3Qg dmlydGlvX2dwdV9mZW5jZSAqKmZlbmNlKTsKK2ludCB2aXJ0aW9fZ3B1X2F0dGFjaF9zdGF0dXNf cGFnZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKK2ludCB2aXJ0aW9fZ3B1X2Rl dGFjaF9zdGF0dXNfcGFnZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKK3ZvaWQg dmlydGlvX2dwdV9jdXJzb3JfcGluZyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAor CQkJICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0KTsKK2ludCB2aXJ0aW9fZ3B1 X2NtZF9nZXRfZGlzcGxheV9pbmZvKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpOwor dm9pZCB2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9pbnZhbF9iYWNraW5nKHN0cnVjdCB2aXJ0aW9f Z3B1X2RldmljZSAqdmdkZXYsCisJCQkJCSAgIHVpbnQzMl90IHJlc291cmNlX2lkKTsKK3ZvaWQg dmlydGlvX2dwdV9jdHJsX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7Cit2b2lkIHZpcnRpb19n cHVfY3Vyc29yX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7Cit2b2lkIHZpcnRpb19ncHVfZGVx dWV1ZV9jdHJsX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgdmlydGlvX2dw dV9kZXF1ZXVlX2N1cnNvcl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qIHZp cnRpb19ncHVfZGlzcGxheS5jICovCitpbnQgdmlydGlvX2dwdV9mcmFtZWJ1ZmZlcl9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIg KnZnZmIsCisJCQkJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAorCQkJCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2ludCB2aXJ0aW9fZ3B1X21vZGVzZXRfaW5pdChzdHJ1 Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKK3ZvaWQgdmlydGlvX2dwdV9tb2Rlc2V0X2Zp bmkoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rldik7CisKKy8qIHZpcnRpb19ncHVfcGxh bmUuYyAqLworc3RydWN0IGRybV9wbGFuZSAqdmlydGlvX2dwdV9wbGFuZV9pbml0KHN0cnVjdCB2 aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJCWludCBpbmRleCk7CisKKy8qIHZpcnRpb19n cHVfdHRtLmMgKi8KK2ludCB2aXJ0aW9fZ3B1X3R0bV9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYpOwordm9pZCB2aXJ0aW9fZ3B1X3R0bV9maW5pKHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYpOworaW50IHZpcnRpb19ncHVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCisvKiB2aXJ0aW9fZ3B1X2ZlbmNlLmMgKi8K K2ludCB2aXJ0aW9fZ3B1X2ZlbmNlX2VtaXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rl diwKKwkJCSAgc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgKmNtZF9oZHIsCisJCQkgIHN0cnVj dCB2aXJ0aW9fZ3B1X2ZlbmNlICoqZmVuY2UpOwordm9pZCB2aXJ0aW9fZ3B1X2ZlbmNlX2V2ZW50 X3Byb2Nlc3Moc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2ZGV2LAorCQkJCSAgICB1NjQgbGFz dF9zZXEpOworCisvKiB2aXJ0aW9fZ3B1X29iamVjdCAqLworaW50IHZpcnRpb19ncHVfb2JqZWN0 X2NyZWF0ZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJICAgICB1bnNpZ25l ZCBsb25nIHNpemUsIGJvb2wga2VybmVsLCBib29sIHBpbm5lZCwKKwkJCSAgICAgc3RydWN0IHZp cnRpb19ncHVfb2JqZWN0ICoqYm9fcHRyKTsKK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9rbWFwKHN0 cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqYm8sIHZvaWQgKipwdHIpOworaW50IHZpcnRpb19ncHVf b2JqZWN0X2dldF9zZ190YWJsZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnFkZXYsCisJCQkJ ICAgc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibyk7Cit2b2lkIHZpcnRpb19ncHVfb2JqZWN0 X2ZyZWVfc2dfdGFibGUoc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibyk7CitpbnQgdmlydGlv X2dwdV9vYmplY3Rfd2FpdChzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvLCBib29sIG5vX3dh aXQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCoKK3ZpcnRpb19n cHVfb2JqZWN0X3JlZihzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQoreworCXR0bV9ib19y ZWZlcmVuY2UoJmJvLT50Ym8pOworCXJldHVybiBibzsKK30KKworc3RhdGljIGlubGluZSB2b2lk IHZpcnRpb19ncHVfb2JqZWN0X3VucmVmKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqKmJvKQor eworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvOworCisJaWYgKCgqYm8pID09IE5VTEwp CisJCXJldHVybjsKKwl0Ym8gPSAmKCgqYm8pLT50Ym8pOworCXR0bV9ib191bnJlZigmdGJvKTsK KwlpZiAodGJvID09IE5VTEwpCisJCSpibyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0 IHZpcnRpb19ncHVfb2JqZWN0X21tYXBfb2Zmc2V0KHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAq Ym8pCit7CisJcmV0dXJuIGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmYm8tPnRiby52bWFfbm9k ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19ncHVfb2JqZWN0X3Jlc2VydmUoc3Ry dWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibywKKwkJCQkJIGJvb2wgbm9fd2FpdCkKK3sKKwlpbnQg cjsKKworCXIgPSB0dG1fYm9fcmVzZXJ2ZSgmYm8tPnRibywgdHJ1ZSwgbm9fd2FpdCwgZmFsc2Us IE5VTEwpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCWlmIChyICE9IC1FUkVTVEFSVFNZ UykgeworCQkJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICpxZGV2ID0KKwkJCQliby0+Z2VtX2Jh c2UuZGV2LT5kZXZfcHJpdmF0ZTsKKwkJCWRldl9lcnIocWRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBm YWlsZWRcbiIsIGJvKTsKKwkJfQorCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCB2aXJ0aW9fZ3B1X29iamVjdF91bnJlc2VydmUoc3RydWN0IHZpcnRp b19ncHVfb2JqZWN0ICpibykKK3sKKwl0dG1fYm9fdW5yZXNlcnZlKCZiby0+dGJvKTsKK30KKwor LyogdmlyZ2wgZGVidWZzICovCitpbnQgdmlydGlvX2dwdV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRy bV9taW5vciAqbWlub3IpOwordm9pZCB2aXJ0aW9fZ3B1X2RlYnVnZnNfdGFrZWRvd24oc3RydWN0 IGRybV9taW5vciAqbWlub3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92aXJ0aW8vdmlydGdwdV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Zi LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViZjMzMwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9mYi5jCkBAIC0wLDAgKzEs NDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQsIEluYy4KKyAqIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0 d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisg KiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9S IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YK KyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO RVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorCisjZGVm aW5lIFZJUlRJT19HUFVfRkJDT05fUE9MTF9QRVJJT0QgKEhaIC8gNjApCisKK3N0cnVjdCB2aXJ0 aW9fZ3B1X2ZiZGV2IHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAgICAgICAgICAgaGVscGVyOwor CXN0cnVjdCB2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyICB2Z2ZiOworCXN0cnVjdCBsaXN0X2hlYWQJ ICAgICAgIGZiZGV2X2xpc3Q7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICAgICAgICp2Z2Rl djsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICAgICAgICAgICAgd29yazsKK307CisKK3N0YXRpYyBp bnQgdmlydGlvX2dwdV9kaXJ0eV91cGRhdGUoc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIg KmZiLAorCQkJCSAgIGJvb2wgc3RvcmUsIGludCB4LCBpbnQgeSwKKwkJCQkgICBpbnQgd2lkdGgs IGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiLT5iYXNlLmRldjsK KwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwli b29sIHN0b3JlX2Zvcl9sYXRlciA9IGZhbHNlOworCWludCBicHAgPSBmYi0+YmFzZS5iaXRzX3Bl cl9waXhlbCAvIDg7CisJaW50IHgyLCB5MjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVj dCB2aXJ0aW9fZ3B1X29iamVjdCAqb2JqID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGZiLT5vYmop OworCisJaWYgKCh3aWR0aCA8PSAwKSB8fAorCSAgICAoeCArIHdpZHRoID4gZmItPmJhc2Uud2lk dGgpIHx8CisJICAgICh5ICsgaGVpZ2h0ID4gZmItPmJhc2UuaGVpZ2h0KSkgeworCQlEUk1fREVC VUcoInZhbHVlcyBvdXQgb2YgcmFuZ2UgJWR4JWQrJWQrJWQsIGZiICVkeCVkXG4iLAorCQkJICB3 aWR0aCwgaGVpZ2h0LCB4LCB5LAorCQkJICBmYi0+YmFzZS53aWR0aCwgZmItPmJhc2UuaGVpZ2h0 KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBDYW4gYmUgY2FsbGVkIHdpdGgg cHJldHR5IG11Y2ggYW55IGNvbnRleHQgKGNvbnNvbGUgb3V0cHV0CisJICogcGF0aCkuICBJZiB3 ZSBhcmUgaW4gYXRvbWljIGp1c3Qgc3RvcmUgdGhlIGRpcnR5IHJlY3QgaW5mbworCSAqIHRvIHNl bmQgb3V0IHRoZSB1cGRhdGUgbGF0ZXIuCisJICoKKwkgKiBDYW4ndCB0ZXN0IGluc2lkZSBzcGlu IGxvY2suCisJICovCisJaWYgKGluX2F0b21pYygpIHx8IHN0b3JlKQorCQlzdG9yZV9mb3JfbGF0 ZXIgPSB0cnVlOworCisJeDIgPSB4ICsgd2lkdGggLSAxOworCXkyID0geSArIGhlaWdodCAtIDE7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmItPmRpcnR5X2xvY2ssIGZsYWdzKTsKKworCWlmIChm Yi0+eTEgPCB5KQorCQl5ID0gZmItPnkxOworCWlmIChmYi0+eTIgPiB5MikKKwkJeTIgPSBmYi0+ eTI7CisJaWYgKGZiLT54MSA8IHgpCisJCXggPSBmYi0+eDE7CisJaWYgKGZiLT54MiA+IHgyKQor CQl4MiA9IGZiLT54MjsKKworCWlmIChzdG9yZV9mb3JfbGF0ZXIpIHsKKwkJZmItPngxID0geDsK KwkJZmItPngyID0geDI7CisJCWZiLT55MSA9IHk7CisJCWZiLT55MiA9IHkyOworCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZmYi0+ZGlydHlfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlmYi0+eDEgPSBmYi0+eTEgPSBJTlRfTUFYOworCWZiLT54MiA9IGZiLT55MiA9IDA7CisK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYi0+ZGlydHlfbG9jaywgZmxhZ3MpOworCisJewor CQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IHcgPSB4MiAtIHggKyAxOworCQl1aW50MzJf dCBoID0geTIgLSB5ICsgMTsKKworCQlvZmZzZXQgPSAoeSAqIGZiLT5iYXNlLnBpdGNoZXNbMF0p ICsgeCAqIGJwcDsKKworCQl2aXJ0aW9fZ3B1X2NtZF90cmFuc2Zlcl90b19ob3N0XzJkKHZnZGV2 LCBvYmotPmh3X3Jlc19oYW5kbGUsCisJCQkJCQkgICBvZmZzZXQsCisJCQkJCQkgICBjcHVfdG9f bGUzMih3KSwKKwkJCQkJCSAgIGNwdV90b19sZTMyKGgpLAorCQkJCQkJICAgY3B1X3RvX2xlMzIo eCksCisJCQkJCQkgICBjcHVfdG9fbGUzMih5KSwKKwkJCQkJCSAgIE5VTEwpOworCisJfQorCXZp cnRpb19ncHVfY21kX3Jlc291cmNlX2ZsdXNoKHZnZGV2LCBvYmotPmh3X3Jlc19oYW5kbGUsCisJ CQkJICAgICAgeCwgeSwgeDIgLSB4ICsgMSwgeTIgLSB5ICsgMSk7CisJcmV0dXJuIDA7Cit9CisK K2ludCB2aXJ0aW9fZ3B1X3N1cmZhY2VfZGlydHkoc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZm ZXIgKnZnZmIsCisJCQkgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCSAgICAg dW5zaWduZWQgbnVtX2NsaXBzKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYg PSB2Z2ZiLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICpvYmogPSBnZW1fdG9fdmlydGlvX2dwdV9vYmoodmdmYi0+b2JqKTsKKwlzdHJ1Y3QgZHJtX2Ns aXBfcmVjdCBub3JlY3Q7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzX3B0cjsKKwlpbnQg bGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tOworCWludCBpOworCWludCBpbmMgPSAxOworCWlmICgh bnVtX2NsaXBzKSB7CisJCW51bV9jbGlwcyA9IDE7CisJCWNsaXBzID0gJm5vcmVjdDsKKwkJbm9y ZWN0LngxID0gbm9yZWN0LnkxID0gMDsKKwkJbm9yZWN0LngyID0gdmdmYi0+YmFzZS53aWR0aDsK KwkJbm9yZWN0LnkyID0gdmdmYi0+YmFzZS5oZWlnaHQ7CisJfQorCWxlZnQgPSBjbGlwcy0+eDE7 CisJcmlnaHQgPSBjbGlwcy0+eDI7CisJdG9wID0gY2xpcHMtPnkxOworCWJvdHRvbSA9IGNsaXBz LT55MjsKKworCS8qIHNraXAgdGhlIGZpcnN0IGNsaXAgcmVjdCAqLworCWZvciAoaSA9IDEsIGNs aXBzX3B0ciA9IGNsaXBzICsgaW5jOworCSAgICAgaSA8IG51bV9jbGlwczsgaSsrLCBjbGlwc19w dHIgKz0gaW5jKSB7CisJCWxlZnQgPSBtaW5fdChpbnQsIGxlZnQsIChpbnQpY2xpcHNfcHRyLT54 MSk7CisJCXJpZ2h0ID0gbWF4X3QoaW50LCByaWdodCwgKGludCljbGlwc19wdHItPngyKTsKKwkJ dG9wID0gbWluX3QoaW50LCB0b3AsIChpbnQpY2xpcHNfcHRyLT55MSk7CisJCWJvdHRvbSA9IG1h eF90KGludCwgYm90dG9tLCAoaW50KWNsaXBzX3B0ci0+eTIpOworCX0KKworCWlmIChvYmotPmR1 bWIpCisJCXJldHVybiB2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSh2Z2ZiLCBmYWxzZSwgbGVmdCwg dG9wLAorCQkJCQkgICAgICAgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOworCisJdmlydGlv X2dwdV9jbWRfcmVzb3VyY2VfZmx1c2godmdkZXYsIG9iai0+aHdfcmVzX2hhbmRsZSwKKwkJCQkg ICAgICBsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV9mYl9kaXJ0eV93b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheWVkX3dvcmsgPSB0b19k ZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IHZpcnRpb19ncHVfZmJkZXYgKnZmYmRldiA9CisJ CWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2LCB3b3Jr KTsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mcmFtZWJ1ZmZlciAqdmdmYiA9ICZ2ZmJkZXYtPnZnZmI7 CisKKwl2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSgmdmZiZGV2LT52Z2ZiLCBmYWxzZSwgdmdmYi0+ eDEsIHZnZmItPnkxLAorCQkJCXZnZmItPngyIC0gdmdmYi0+eDEsIHZnZmItPnkyIC0gdmdmYi0+ eTEpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1XzNkX2ZpbGxyZWN0KHN0cnVjdCBmYl9p bmZvICppbmZvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlz dHJ1Y3QgdmlydGlvX2dwdV9mYmRldiAqdmZiZGV2ID0gaW5mby0+cGFyOworCXN5c19maWxscmVj dChpbmZvLCByZWN0KTsKKwl2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSgmdmZiZGV2LT52Z2ZiLCB0 cnVlLCByZWN0LT5keCwgcmVjdC0+ZHksCisJCQkgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWln aHQpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdmZiZGV2LT53b3JrLCBWSVJUSU9fR1BVX0ZC Q09OX1BPTExfUEVSSU9EKTsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV8zZF9jb3B5YXJl YShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEg KmFyZWEpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZmJkZXYgKnZmYmRldiA9IGluZm8tPnBhcjsK KwlzeXNfY29weWFyZWEoaW5mbywgYXJlYSk7CisJdmlydGlvX2dwdV9kaXJ0eV91cGRhdGUoJnZm YmRldi0+dmdmYiwgdHJ1ZSwgYXJlYS0+ZHgsIGFyZWEtPmR5LAorCQkJICAgYXJlYS0+d2lkdGgs IGFyZWEtPmhlaWdodCk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2ZmJkZXYtPndvcmssIFZJ UlRJT19HUFVfRkJDT05fUE9MTF9QRVJJT0QpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1 XzNkX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY29uc3Qgc3RydWN0 IGZiX2ltYWdlICppbWFnZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mYmRldiAqdmZiZGV2ID0g aW5mby0+cGFyOworCXN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCXZpcnRpb19ncHVfZGly dHlfdXBkYXRlKCZ2ZmJkZXYtPnZnZmIsIHRydWUsIGltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkJ ICAgICBpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29y aygmdmZiZGV2LT53b3JrLCBWSVJUSU9fR1BVX0ZCQ09OX1BPTExfUEVSSU9EKTsKK30KKworc3Rh dGljIHN0cnVjdCBmYl9vcHMgdmlydGlvX2dwdWZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01P RFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCisJLmZiX3Nl dF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsIC8qIFRPRE86IGNvcHkgdm13Z2Z4ICovCisJ LmZiX2ZpbGxyZWN0ID0gdmlydGlvX2dwdV8zZF9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSB2 aXJ0aW9fZ3B1XzNkX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSB2aXJ0aW9fZ3B1XzNkX2lt YWdlYmxpdCwKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAor CS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJf aGVscGVyX3NldGNtYXAsCisJLmZiX2RlYnVnX2VudGVyID0gZHJtX2ZiX2hlbHBlcl9kZWJ1Z19l bnRlciwKKwkuZmJfZGVidWdfbGVhdmUgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlLAorfTsK Kworc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZtYXBfZmIoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNl ICp2Z2RldiwKKwkJCSAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqb2JqKQoreworCXJl dHVybiB2aXJ0aW9fZ3B1X29iamVjdF9rbWFwKG9iaiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQg dmlydGlvX2dwdWZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAorCQkJICAg ICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCit7CisJc3RydWN0 IHZpcnRpb19ncHVfZmJkZXYgKnZmYmRldiA9CisJCWNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVj dCB2aXJ0aW9fZ3B1X2ZiZGV2LCBoZWxwZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBo ZWxwZXItPmRldjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYjsKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZCA9IHt9OworCXN0cnVjdCB2 aXJ0aW9fZ3B1X29iamVjdCAqb2JqOworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IHZnZGV2LT5k ZXY7CisJdWludDMyX3QgcmVzaWQsIGZvcm1hdCwgc2l6ZTsKKwlpbnQgcmV0OworCisJbW9kZV9j bWQud2lkdGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKKwltb2RlX2NtZC5oZWlnaHQgPSBzaXpl cy0+c3VyZmFjZV9oZWlnaHQ7CisJbW9kZV9jbWQucGl0Y2hlc1swXSA9IG1vZGVfY21kLndpZHRo ICogNDsKKwltb2RlX2NtZC5waXhlbF9mb3JtYXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0 KDMyLCAyNCk7CisKKwlzd2l0Y2ggKG1vZGVfY21kLnBpeGVsX2Zvcm1hdCkgeworI2lmZGVmIF9f QklHX0VORElBTgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJZm9ybWF0ID0gVklSVElP X0dQVV9GT1JNQVRfWDhSOEc4QjhfVU5PUk07CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9B UkdCODg4ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQVV9GT1JNQVRfQThSOEc4QjhfVU5PUk07CisJ CWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQ VV9GT1JNQVRfQjhHOFI4WDhfVU5PUk07CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1JB ODg4ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQVV9GT1JNQVRfQjhHOFI4QThfVU5PUk07CisJCWJy ZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQVV9G T1JNQVRfUjhHOEI4WDhfVU5PUk07CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4 ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQVV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CisJCWJyZWFr OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwkJZm9ybWF0ID0gVklSVElPX0dQVV9GT1JN QVRfWDhCOEc4UjhfVU5PUk07CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK KwkJZm9ybWF0ID0gVklSVElPX0dQVV9GT1JNQVRfQThCOEc4UjhfVU5PUk07CisJCWJyZWFrOwor I2Vsc2UKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCWZvcm1hdCA9IFZJUlRJT19HUFVf Rk9STUFUX0I4RzhSOFg4X1VOT1JNOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4 ODg6CisJCWZvcm1hdCA9IFZJUlRJT19HUFVfRk9STUFUX0I4RzhSOEE4X1VOT1JNOworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJCWZvcm1hdCA9IFZJUlRJT19HUFVfRk9S TUFUX1g4UjhHOEI4X1VOT1JNOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6 CisJCWZvcm1hdCA9IFZJUlRJT19HUFVfRk9STUFUX0E4UjhHOEI4X1VOT1JNOworCQlicmVhazsK KwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6CisJCWZvcm1hdCA9IFZJUlRJT19HUFVfRk9STUFU X1g4QjhHOFI4X1VOT1JNOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJ CWZvcm1hdCA9IFZJUlRJT19HUFVfRk9STUFUX0E4QjhHOFI4X1VOT1JNOworCQlicmVhazsKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJCWZvcm1hdCA9IFZJUlRJT19HUFVfRk9STUFUX1I4 RzhCOFg4X1VOT1JNOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWZv cm1hdCA9IFZJUlRJT19HUFVfRk9STUFUX1I4RzhCOEE4X1VOT1JNOworCQlicmVhazsKKyNlbmRp ZgorCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdmlydGlvIGdwdSBmb3Jt YXQgZm9yICVkXG4iLAorCQkJICBtb2RlX2NtZC5waXhlbF9mb3JtYXQpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdo dDsKKwlvYmogPSB2aXJ0aW9fZ3B1X2FsbG9jX29iamVjdChkZXYsIHNpemUsIGZhbHNlLCB0cnVl KTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2aXJ0aW9fZ3B1X3Jlc291cmNl X2lkX2dldCh2Z2RldiwgJnJlc2lkKTsKKwl2aXJ0aW9fZ3B1X2NtZF9jcmVhdGVfcmVzb3VyY2Uo dmdkZXYsIHJlc2lkLCBmb3JtYXQsCisJCQkJICAgICAgIG1vZGVfY21kLndpZHRoLCBtb2RlX2Nt ZC5oZWlnaHQpOworCisJcmV0ID0gdmlydGlvX2dwdV92bWFwX2ZiKHZnZGV2LCBvYmopOworCWlm IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYiAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnJfb2JqX3ZtYXA7CisJfQorCisJLyogYXR0YWNoIHRoZSBvYmplY3QgdG8gdGhlIHJl c291cmNlICovCisJcmV0ID0gdmlydGlvX2dwdV9vYmplY3RfYXR0YWNoKHZnZGV2LCBvYmosIHJl c2lkLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vYmpfYXR0YWNoOworCisJaW5mbyA9 IGZyYW1lYnVmZmVyX2FsbG9jKDAsIGRldmljZSk7CisJaWYgKCFpbmZvKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZXJyX2ZiX2FsbG9jOworCX0KKworCXJldCA9IGZiX2FsbG9jX2NtYXAo JmluZm8tPmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGVycl9mYl9hbGxvY19jbWFwOworCX0KKworCWluZm8tPnBhciA9IGhlbHBlcjsKKworCXJl dCA9IHZpcnRpb19ncHVfZnJhbWVidWZmZXJfaW5pdChkZXYsICZ2ZmJkZXYtPnZnZmIsCisJCQkJ CSAgJm1vZGVfY21kLCAmb2JqLT5nZW1fYmFzZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZmJf aW5pdDsKKworCWZiID0gJnZmYmRldi0+dmdmYi5iYXNlOworCisJdmZiZGV2LT5oZWxwZXIuZmIg PSBmYjsKKwl2ZmJkZXYtPmhlbHBlci5mYmRldiA9IGluZm87CisKKwlzdHJjcHkoaW5mby0+Zml4 LmlkLCAidmlydGlvZHJtZmIiKTsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCWlu Zm8tPmZib3BzID0gJnZpcnRpb19ncHVmYl9vcHM7CisJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJf UElYTUFQX1NZU1RFTTsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gb2JqLT52bWFwOworCWluZm8t PnNjcmVlbl9zaXplID0gb2JqLT5nZW1fYmFzZS5zaXplOworCWRybV9mYl9oZWxwZXJfZmlsbF9m aXgoaW5mbywgZmItPnBpdGNoZXNbMF0sIGZiLT5kZXB0aCk7CisJZHJtX2ZiX2hlbHBlcl9maWxs X3ZhcihpbmZvLCAmdmZiZGV2LT5oZWxwZXIsCisJCQkgICAgICAgc2l6ZXMtPmZiX3dpZHRoLCBz aXplcy0+ZmJfaGVpZ2h0KTsKKworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gMDsKKwlpbmZvLT5m aXgubW1pb19sZW4gPSAwOworCXJldHVybiAwOworCitlcnJfZmJfaW5pdDoKKwlmYl9kZWFsbG9j X2NtYXAoJmluZm8tPmNtYXApOworZXJyX2ZiX2FsbG9jX2NtYXA6CisJZnJhbWVidWZmZXJfcmVs ZWFzZShpbmZvKTsKK2Vycl9mYl9hbGxvYzoKKwl2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9pbnZh bF9iYWNraW5nKHZnZGV2LCByZXNpZCk7CitlcnJfb2JqX2F0dGFjaDoKK2Vycl9vYmpfdm1hcDoK Kwl2aXJ0aW9fZ3B1X2dlbV9mcmVlX29iamVjdCgmb2JqLT5nZW1fYmFzZSk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCB2aXJ0aW9fZ3B1X2ZiZGV2X2Rlc3Ryb3koc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHZpcnRpb19ncHVfZmJkZXYgKnZnZmJkZXYpCit7 CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIg KnZnZmIgPSAmdmdmYmRldi0+dmdmYjsKKworCWlmICh2Z2ZiZGV2LT5oZWxwZXIuZmJkZXYpIHsK KwkJaW5mbyA9IHZnZmJkZXYtPmhlbHBlci5mYmRldjsKKworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVm ZmVyKGluZm8pOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKwlpZiAodmdmYi0+ b2JqKQorCQl2Z2ZiLT5vYmogPSBOVUxMOworCWRybV9mYl9oZWxwZXJfZmluaSgmdmdmYmRldi0+ aGVscGVyKTsKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmdmdmYi0+YmFzZSk7CisKKwlyZXR1 cm4gMDsKK30KK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB2aXJ0aW9fZ3B1X2Zi X2hlbHBlcl9mdW5jcyA9IHsKKwkuZmJfcHJvYmUgPSB2aXJ0aW9fZ3B1ZmJfY3JlYXRlLAorfTsK KworaW50IHZpcnRpb19ncHVfZmJkZXZfaW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZn ZGV2KQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2ICp2Z2ZiZGV2OworCWludCBicHBfc2Vs ID0gMzI7IC8qIFRPRE86IHBhcmFtZXRlciBmcm9tIHNvbWV3aGVyZT8gKi8KKwlpbnQgcmV0Owor CisJdmdmYmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF2Z2ZiZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZnZmJkZXYt PnZnZGV2ID0gdmdkZXY7CisJdmdkZXYtPnZnZmJkZXYgPSB2Z2ZiZGV2OworCUlOSVRfREVMQVlF RF9XT1JLKCZ2Z2ZiZGV2LT53b3JrLCB2aXJ0aW9fZ3B1X2ZiX2RpcnR5X3dvcmspOworCisJZHJt X2ZiX2hlbHBlcl9wcmVwYXJlKHZnZGV2LT5kZGV2LCAmdmdmYmRldi0+aGVscGVyLAorCQkJICAg ICAgJnZpcnRpb19ncHVfZmJfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2lu aXQodmdkZXYtPmRkZXYsICZ2Z2ZiZGV2LT5oZWxwZXIsCisJCQkJIHZnZGV2LT5udW1fc2Nhbm91 dHMsCisJCQkJIFZJUlRJT19HUFVGQl9DT05OX0xJTUlUKTsKKwlpZiAocmV0KSB7CisJCWtmcmVl KHZnZmJkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9mYl9oZWxwZXJfc2luZ2xlX2Fk ZF9hbGxfY29ubmVjdG9ycygmdmdmYmRldi0+aGVscGVyKTsKKwlkcm1fZmJfaGVscGVyX2luaXRp YWxfY29uZmlnKCZ2Z2ZiZGV2LT5oZWxwZXIsIGJwcF9zZWwpOworCXJldHVybiAwOworfQorCit2 b2lkIHZpcnRpb19ncHVfZmJkZXZfZmluaShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2 KQoreworCWlmICghdmdkZXYtPnZnZmJkZXYpCisJCXJldHVybjsKKworCXZpcnRpb19ncHVfZmJk ZXZfZGVzdHJveSh2Z2Rldi0+ZGRldiwgdmdkZXYtPnZnZmJkZXYpOworCWtmcmVlKHZnZGV2LT52 Z2ZiZGV2KTsKKwl2Z2Rldi0+dmdmYmRldiA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9mZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTYz MjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZmVu Y2UuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBSZWQgSGF0 LCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICog YSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgorI2luY2x1ZGUgInZpcnRncHVfZHJ2LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp2 aXJ0aW9fZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBmZW5jZSAqZikKK3sKKwlyZXR1cm4gInZpcnRp b19ncHUiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdmlydGlvX2dldF90aW1lbGluZV9uYW1l KHN0cnVjdCBmZW5jZSAqZikKK3sKKwlyZXR1cm4gImNvbnRyb2xxIjsKK30KKworc3RhdGljIGJv b2wgdmlydGlvX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmKQoreworCXJldHVybiB0 cnVlOworfQorCitzdGF0aWMgYm9vbCB2aXJ0aW9fc2lnbmFsZWQoc3RydWN0IGZlbmNlICpmKQor eworCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSA9IHRvX3ZpcnRpb19mZW5jZShmKTsK KworCWlmIChhdG9taWM2NF9yZWFkKCZmZW5jZS0+ZHJ2LT5sYXN0X3NlcSkgPj0gZmVuY2UtPnNl cSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB2aXJ0 aW9fZmVuY2VfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAqZiwgY2hhciAqc3RyLCBpbnQgc2l6ZSkK K3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqZmVuY2UgPSB0b192aXJ0aW9fZmVuY2UoZik7 CisKKwlzbnByaW50ZihzdHIsIHNpemUsICIlbGx1IiwgZmVuY2UtPnNlcSk7Cit9CisKK3N0YXRp YyB2b2lkIHZpcnRpb190aW1lbGluZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmLCBjaGFyICpz dHIsIGludCBzaXplKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSA9IHRvX3Zp cnRpb19mZW5jZShmKTsKKworCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVsdSIsIGF0b21pYzY0X3Jl YWQoJmZlbmNlLT5kcnYtPmxhc3Rfc2VxKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVu Y2Vfb3BzIHZpcnRpb19mZW5jZV9vcHMgPSB7CisJLmdldF9kcml2ZXJfbmFtZSAgICAgPSB2aXJ0 aW9fZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSAgID0gdmlydGlvX2dldF90 aW1lbGluZV9uYW1lLAorCS5lbmFibGVfc2lnbmFsaW5nICAgID0gdmlydGlvX2VuYWJsZV9zaWdu YWxpbmcsCisJLnNpZ25hbGVkICAgICAgICAgICAgPSB2aXJ0aW9fc2lnbmFsZWQsCisJLndhaXQg ICAgICAgICAgICAgICAgPSBmZW5jZV9kZWZhdWx0X3dhaXQsCisJLmZlbmNlX3ZhbHVlX3N0ciAg ICAgPSB2aXJ0aW9fZmVuY2VfdmFsdWVfc3RyLAorCS50aW1lbGluZV92YWx1ZV9zdHIgID0gdmly dGlvX3RpbWVsaW5lX3ZhbHVlX3N0ciwKK307CisKK2ludCB2aXJ0aW9fZ3B1X2ZlbmNlX2VtaXQo c3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgc3RydWN0IHZpcnRpb19ncHVf Y3RybF9oZHIgKmNtZF9oZHIsCisJCQkgIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICoqZmVuY2Up Cit7CisJc3RydWN0IHZpcnRpb19ncHVfZmVuY2VfZHJpdmVyICpkcnYgPSAmdmdkZXYtPmZlbmNl X2RydjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCSpmZW5jZSA9IGttYWxsb2Moc2l6 ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCgqZmVuY2Up ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+ bG9jaywgaXJxX2ZsYWdzKTsKKwkoKmZlbmNlKS0+ZHJ2ID0gZHJ2OworCSgqZmVuY2UpLT5zZXEg PSArK2Rydi0+c3luY19zZXE7CisJZmVuY2VfaW5pdCgmKCpmZW5jZSktPmYsICZ2aXJ0aW9fZmVu Y2Vfb3BzLCAmZHJ2LT5sb2NrLAorCQkgICAwLCAoKmZlbmNlKS0+c2VxKTsKKwlmZW5jZV9nZXQo JigqZmVuY2UpLT5mKTsKKwlsaXN0X2FkZF90YWlsKCYoKmZlbmNlKS0+bm9kZSwgJmRydi0+ZmVu Y2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGlycV9mbGFncyk7CisK KwljbWRfaGRyLT5mbGFncyB8PSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0ZMQUdfRkVOQ0UpOwor CWNtZF9oZHItPmZlbmNlX2lkID0gY3B1X3RvX2xlNjQoKCpmZW5jZSktPnNlcSk7CisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgdmlydGlvX2dwdV9mZW5jZV9ldmVudF9wcm9jZXNzKHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJICAgIHU2NCBsYXN0X3NlcSkKK3sKKwlzdHJ1Y3Qg dmlydGlvX2dwdV9mZW5jZV9kcml2ZXIgKmRydiA9ICZ2Z2Rldi0+ZmVuY2VfZHJ2OworCXN0cnVj dCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFn czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGlycV9mbGFncyk7CisJYXRvbWlj NjRfc2V0KCZ2Z2Rldi0+ZmVuY2VfZHJ2Lmxhc3Rfc2VxLCBsYXN0X3NlcSk7CisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGZlbmNlLCB0bXAsICZkcnYtPmZlbmNlcywgbm9kZSkgeworCQlpZiAo bGFzdF9zZXEgPCBmZW5jZS0+c2VxKQorCQkJY29udGludWU7CisJCWZlbmNlX3NpZ25hbF9sb2Nr ZWQoJmZlbmNlLT5mKTsKKwkJbGlzdF9kZWwoJmZlbmNlLT5ub2RlKTsKKwkJZmVuY2VfcHV0KCZm ZW5jZS0+Zik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgaXJxX2Zs YWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jZmEwZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2dlbS5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQg bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElU WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4K KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBT VVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIK Kwordm9pZCB2aXJ0aW9fZ3B1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbV9vYmopCit7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpvYmogPSBnZW1fdG9fdmly dGlvX2dwdV9vYmooZ2VtX29iaik7CisKKwlpZiAob2JqKQorCQl2aXJ0aW9fZ3B1X29iamVjdF91 bnJlZigmb2JqKTsKK30KKworc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICp2aXJ0aW9fZ3B1X2Fs bG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICBzaXplX3Qgc2l6ZSwg Ym9vbCBrZXJuZWwsCisJCQkJCQkgIGJvb2wgcGlubmVkKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2aXJ0aW9fZ3B1X29i amVjdCAqb2JqOworCWludCByZXQ7CisKKwlyZXQgPSB2aXJ0aW9fZ3B1X29iamVjdF9jcmVhdGUo dmdkZXYsIHNpemUsIGtlcm5lbCwgcGlubmVkLCAmb2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g RVJSX1BUUihyZXQpOworCisJcmV0dXJuIG9iajsKK30KKworaW50IHZpcnRpb19ncHVfZ2VtX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkgIHVpbnQ2NF90IHNpemUsCisJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9ial9w LAorCQkJICB1aW50MzJfdCAqaGFuZGxlX3ApCit7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICpvYmo7CisJaW50IHJldDsKKwl1MzIgaGFuZGxlOworCisJb2JqID0gdmlydGlvX2dwdV9hbGxv Y19vYmplY3QoZGV2LCBzaXplLCBmYWxzZSwgZmFsc2UpOworCWlmIChJU19FUlIob2JqKSkKKwkJ cmV0dXJuIFBUUl9FUlIob2JqKTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxl LCAmb2JqLT5nZW1fYmFzZSwgJmhhbmRsZSk7CisJaWYgKHJldCkgeworCQlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKCZvYmotPmdlbV9iYXNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqb2JqX3Ag PSAmb2JqLT5nZW1fYmFzZTsKKworCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBo YW5kbGUgaG9sZHMgaXQgbm93ICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2Nr ZWQoJm9iai0+Z2VtX2Jhc2UpOworCisJKmhhbmRsZV9wID0gaGFuZGxlOworCXJldHVybiAwOwor fQorCitpbnQgdmlydGlvX2dwdV9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9tb2Rl X2NyZWF0ZV9kdW1iICphcmdzKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYg PSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKKwlzdHJ1 Y3QgdmlydGlvX2dwdV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCXVpbnQzMl90IHBpdGNoOwor CXVpbnQzMl90IHJlc2lkOworCisJcGl0Y2ggPSBhcmdzLT53aWR0aCAqICgoYXJncy0+YnBwICsg MSkgLyA4KTsKKwlhcmdzLT5zaXplID0gcGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisJYXJncy0+c2l6 ZSA9IEFMSUdOKGFyZ3MtPnNpemUsIFBBR0VfU0laRSk7CisKKwlyZXQgPSB2aXJ0aW9fZ3B1X2dl bV9jcmVhdGUoZmlsZV9wcml2LCBkZXYsIGFyZ3MtPnNpemUsICZnb2JqLAorCQkJCSAgICAmYXJn cy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwl2aXJ0aW9fZ3B1X3Jlc291 cmNlX2lkX2dldCh2Z2RldiwgJnJlc2lkKTsKKwl2aXJ0aW9fZ3B1X2NtZF9jcmVhdGVfcmVzb3Vy Y2UodmdkZXYsIHJlc2lkLAorCQkJCSAgICAgICAyLCBhcmdzLT53aWR0aCwgYXJncy0+aGVpZ2h0 KTsKKworCS8qIGF0dGFjaCB0aGUgb2JqZWN0IHRvIHRoZSByZXNvdXJjZSAqLworCW9iaiA9IGdl bV90b192aXJ0aW9fZ3B1X29iaihnb2JqKTsKKwlyZXQgPSB2aXJ0aW9fZ3B1X29iamVjdF9hdHRh Y2godmdkZXYsIG9iaiwgcmVzaWQsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKwor CW9iai0+ZHVtYiA9IHRydWU7CisJYXJncy0+cGl0Y2ggPSBwaXRjaDsKKwlyZXR1cm4gcmV0Owor CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCB2aXJ0aW9fZ3B1X21vZGVfZHVtYl9kZXN0 cm95KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCSB1aW50MzJfdCBoYW5kbGUpCit7CisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2Rl bGV0ZShmaWxlX3ByaXYsIGhhbmRsZSk7Cit9CisKK2ludCB2aXJ0aW9fZ3B1X21vZGVfZHVtYl9t bWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICAgc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldF9wKQor eworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmpl Y3QgKm9iajsKKwlCVUdfT04oIW9mZnNldF9wKTsKKwlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9v a3VwKGRldiwgZmlsZV9wcml2LCBoYW5kbGUpOworCWlmIChnb2JqID09IE5VTEwpCisJCXJldHVy biAtRU5PRU5UOworCW9iaiA9IGdlbV90b192aXJ0aW9fZ3B1X29iaihnb2JqKTsKKwkqb2Zmc2V0 X3AgPSB2aXJ0aW9fZ3B1X29iamVjdF9tbWFwX29mZnNldChvYmopOworCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Zp cnRpby92aXJ0Z3B1X2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2 NzAxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf a21zLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmVkIEhh dCwgSW5jLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAq IGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwg VEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQorICogTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvdmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUg PGRybS9kcm1QLmg+CisjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIKKworc3RhdGljIHZvaWQgdmly dGlvX2dwdV9jb25maWdfY2hhbmdlZF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPQorCQljb250YWluZXJfb2Yo d29yaywgc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlLAorCQkJICAgICBjb25maWdfY2hhbmdlZF93 b3JrKTsKKwl1MzIgZXZlbnRzX3JlYWQsIGV2ZW50c19jbGVhciA9IDA7CisKKwkvKiByZWFkIHRo ZSBjb25maWcgc3BhY2UgKi8KKwl2aXJ0aW9fY3JlYWQodmdkZXYtPnZkZXYsIHN0cnVjdCB2aXJ0 aW9fZ3B1X2NvbmZpZywKKwkJICAgICBldmVudHNfcmVhZCwgJmV2ZW50c19yZWFkKTsKKwlpZiAo ZXZlbnRzX3JlYWQgJiBWSVJUSU9fR1BVX0VWRU5UX0RJU1BMQVkpIHsKKwkJdmlydGlvX2dwdV9j bWRfZ2V0X2Rpc3BsYXlfaW5mbyh2Z2Rldik7CisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudCh2 Z2Rldi0+ZGRldik7CisJCWV2ZW50c19jbGVhciB8PSBWSVJUSU9fR1BVX0VWRU5UX0RJU1BMQVk7 CisJfQorCXZpcnRpb19jd3JpdGUodmdkZXYtPnZkZXYsIHN0cnVjdCB2aXJ0aW9fZ3B1X2NvbmZp ZywKKwkJICAgICAgZXZlbnRzX2NsZWFyLCAmZXZlbnRzX2NsZWFyKTsKK30KKworc3RhdGljIHZv aWQgdmlydGlvX2dwdV9pbml0X3ZxKHN0cnVjdCB2aXJ0aW9fZ3B1X3F1ZXVlICp2Z3ZxLAorCQkJ ICAgICAgIHZvaWQgKCp3b3JrX2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykpCit7CisJ c3Bpbl9sb2NrX2luaXQoJnZndnEtPnFsb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2Z3Zx LT5hY2tfcXVldWUpOworCUlOSVRfV09SSygmdmd2cS0+ZGVxdWV1ZV93b3JrLCB3b3JrX2Z1bmMp OworfQorCitpbnQgdmlydGlvX2dwdV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0YXRpYyB2cV9jYWxsYmFja190ICpjYWxsYmFj a3NbXSA9IHsKKwkJdmlydGlvX2dwdV9jdHJsX2FjaywgdmlydGlvX2dwdV9jdXJzb3JfYWNrCisJ fTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgImNvbnRyb2wiLCAiY3Vyc29yIiB9 OworCisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKKwkvKiB0aGlzIHdpbGwgZXhw YW5kIGxhdGVyICovCisJc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOworCXUzMiBudW1fc2Nhbm91 dHM7CisJaW50IHJldDsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKGRldi0+dmlydGRldiwg VklSVElPX0ZfVkVSU0lPTl8xKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2Z2RldiA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICgh dmdkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdmdkZXYtPmRkZXYgPSBkZXY7CisJZGV2LT5k ZXZfcHJpdmF0ZSA9IHZnZGV2OworCXZnZGV2LT52ZGV2ID0gZGV2LT52aXJ0ZGV2OworCXZnZGV2 LT5kZXYgPSBkZXYtPmRldjsKKworCXNwaW5fbG9ja19pbml0KCZ2Z2Rldi0+ZGlzcGxheV9pbmZv X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2Z2Rldi0+Y3R4X2lkX2lkcl9sb2NrKTsKKwlpZHJf aW5pdCgmdmdkZXYtPmN0eF9pZF9pZHIpOworCXNwaW5fbG9ja19pbml0KCZ2Z2Rldi0+cmVzb3Vy Y2VfaWRyX2xvY2spOworCWlkcl9pbml0KCZ2Z2Rldi0+cmVzb3VyY2VfaWRyKTsKKwlpbml0X3dh aXRxdWV1ZV9oZWFkKCZ2Z2Rldi0+cmVzcF93cSk7CisJdmlydGlvX2dwdV9pbml0X3ZxKCZ2Z2Rl di0+Y3RybHEsIHZpcnRpb19ncHVfZGVxdWV1ZV9jdHJsX2Z1bmMpOworCXZpcnRpb19ncHVfaW5p dF92cSgmdmdkZXYtPmN1cnNvcnEsIHZpcnRpb19ncHVfZGVxdWV1ZV9jdXJzb3JfZnVuYyk7CisK KwlzcGluX2xvY2tfaW5pdCgmdmdkZXYtPmZlbmNlX2Rydi5sb2NrKTsKKwlJTklUX0xJU1RfSEVB RCgmdmdkZXYtPmZlbmNlX2Rydi5mZW5jZXMpOworCUlOSVRfV09SSygmdmdkZXYtPmNvbmZpZ19j aGFuZ2VkX3dvcmssCisJCSAgdmlydGlvX2dwdV9jb25maWdfY2hhbmdlZF93b3JrX2Z1bmMpOwor CisJcmV0ID0gdmdkZXYtPnZkZXYtPmNvbmZpZy0+ZmluZF92cXModmdkZXYtPnZkZXYsIDIsIHZx cywKKwkJCQkJICAgIGNhbGxiYWNrcywgbmFtZXMpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gZmluZCB2aXJ0IHF1ZXVlc1xuIik7CisJCWdvdG8gZXJyX3ZxczsKKwl9CisJ dmdkZXYtPmN0cmxxLnZxID0gdnFzWzBdOworCXZnZGV2LT5jdXJzb3JxLnZxID0gdnFzWzFdOwor CXJldCA9IHZpcnRpb19ncHVfYWxsb2NfdmJ1ZnModmdkZXYpOworCWlmIChyZXQpIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gYWxsb2MgdmJ1ZnNcbiIpOworCQlnb3RvIGVycl92YnVmczsKKwl9 CisKKwlyZXQgPSB2aXJ0aW9fZ3B1X3R0bV9pbml0KHZnZGV2KTsKKwlpZiAocmV0KSB7CisJCURS TV9FUlJPUigiZmFpbGVkIHRvIGluaXQgdHRtICVkXG4iLCByZXQpOworCQlnb3RvIGVycl90dG07 CisJfQorCisJLyogZ2V0IGRpc3BsYXkgaW5mbyAqLworCXZpcnRpb19jcmVhZCh2Z2Rldi0+dmRl diwgc3RydWN0IHZpcnRpb19ncHVfY29uZmlnLAorCQkgICAgIG51bV9zY2Fub3V0cywgJm51bV9z Y2Fub3V0cyk7CisJdmdkZXYtPm51bV9zY2Fub3V0cyA9IG1pbl90KHVpbnQzMl90LCBudW1fc2Nh bm91dHMsCisJCQkJICAgIFZJUlRJT19HUFVfTUFYX1NDQU5PVVRTKTsKKwlpZiAoIXZnZGV2LT5u dW1fc2Nhbm91dHMpIHsKKwkJRFJNX0VSUk9SKCJudW1fc2Nhbm91dHMgaXMgemVyb1xuIik7CisJ CXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3NjYW5vdXRzOworCX0KKworCXJldCA9IHZpcnRp b19ncHVfbW9kZXNldF9pbml0KHZnZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9tb2Rlc2V0 OworCisJdmlydGlvX2RldmljZV9yZWFkeSh2Z2Rldi0+dmRldik7CisJdmdkZXYtPnZxc19yZWFk eSA9IHRydWU7CisJdmlydGlvX2dwdV9jbWRfZ2V0X2Rpc3BsYXlfaW5mbyh2Z2Rldik7CisJcmV0 dXJuIDA7CisKK2Vycl9tb2Rlc2V0OgorZXJyX3NjYW5vdXRzOgorCXZpcnRpb19ncHVfdHRtX2Zp bmkodmdkZXYpOworZXJyX3R0bToKKwl2aXJ0aW9fZ3B1X2ZyZWVfdmJ1ZnModmdkZXYpOworZXJy X3ZidWZzOgorCXZnZGV2LT52ZGV2LT5jb25maWctPmRlbF92cXModmdkZXYtPnZkZXYpOworZXJy X3ZxczoKKwlrZnJlZSh2Z2Rldik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZpcnRpb19ncHVf ZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2aXJ0aW9f Z3B1X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJdmdkZXYtPnZxc19yZWFk eSA9IGZhbHNlOworCWZsdXNoX3dvcmsoJnZnZGV2LT5jdHJscS5kZXF1ZXVlX3dvcmspOworCWZs dXNoX3dvcmsoJnZnZGV2LT5jdXJzb3JxLmRlcXVldWVfd29yayk7CisJdmdkZXYtPnZkZXYtPmNv bmZpZy0+ZGVsX3Zxcyh2Z2Rldi0+dmRldik7CisKKwl2aXJ0aW9fZ3B1X21vZGVzZXRfZmluaSh2 Z2Rldik7CisJdmlydGlvX2dwdV90dG1fZmluaSh2Z2Rldik7CisJdmlydGlvX2dwdV9mcmVlX3Zi dWZzKHZnZGV2KTsKKwlrZnJlZSh2Z2Rldik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v dmlydGlvL3ZpcnRncHVfb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMmM2MjRjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmly dGdwdV9vYmplY3QuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx NSBSZWQgSGF0LCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisg KiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNs dWRlICJ2aXJ0Z3B1X2Rydi5oIgorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X3R0bV9ib19kZXN0 cm95KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1 X29iamVjdCAqYm87CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKKworCWJvID0g Y29udGFpbmVyX29mKHRibywgc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0LCB0Ym8pOworCXZnZGV2 ID0gKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqKWJvLT5nZW1fYmFzZS5kZXYtPmRldl9wcml2 YXRlOworCisJaWYgKGJvLT5od19yZXNfaGFuZGxlKQorCQl2aXJ0aW9fZ3B1X2NtZF91bnJlZl9y ZXNvdXJjZSh2Z2RldiwgYm8tPmh3X3Jlc19oYW5kbGUpOworCWlmIChiby0+cGFnZXMpCisJCXZp cnRpb19ncHVfb2JqZWN0X2ZyZWVfc2dfdGFibGUoYm8pOworCWRybV9nZW1fb2JqZWN0X3JlbGVh c2UoJmJvLT5nZW1fYmFzZSk7CisJa2ZyZWUoYm8pOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9f Z3B1X2luaXRfdHRtX3BsYWNlbWVudChzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKnZnYm8sCisJ CQkJCSAgYm9vbCBwaW5uZWQpCit7CisJdTMyIGMgPSAxOworCXUzMiBwZmxhZyA9IHBpbm5lZCA/ IFRUTV9QTF9GTEFHX05PX0VWSUNUIDogMDsKKworCXZnYm8tPnBsYWNlbWVudC5wbGFjZW1lbnQg PSAmdmdiby0+cGxhY2VtZW50X2NvZGU7CisJdmdiby0+cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50 ID0gJnZnYm8tPnBsYWNlbWVudF9jb2RlOworCXZnYm8tPnBsYWNlbWVudF9jb2RlLmZwZm4gPSAw OworCXZnYm8tPnBsYWNlbWVudF9jb2RlLmxwZm4gPSAwOworCXZnYm8tPnBsYWNlbWVudF9jb2Rl LmZsYWdzID0KKwkJVFRNX1BMX01BU0tfQ0FDSElORyB8IFRUTV9QTF9GTEFHX1RUIHwgcGZsYWc7 CisJdmdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgPSBjOworCXZnYm8tPnBsYWNlbWVudC5u dW1fYnVzeV9wbGFjZW1lbnQgPSBjOworCit9CisKK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9jcmVh dGUoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgICAgdW5zaWduZWQgbG9u ZyBzaXplLCBib29sIGtlcm5lbCwgYm9vbCBwaW5uZWQsCisJCQkgICAgIHN0cnVjdCB2aXJ0aW9f Z3B1X29iamVjdCAqKmJvX3B0cikKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvOwor CWVudW0gdHRtX2JvX3R5cGUgdHlwZTsKKwlzaXplX3QgYWNjX3NpemU7CisJaW50IHJldDsKKwor CWlmIChrZXJuZWwpCisJCXR5cGUgPSB0dG1fYm9fdHlwZV9rZXJuZWw7CisJZWxzZQorCQl0eXBl ID0gdHRtX2JvX3R5cGVfZGV2aWNlOworCSpib19wdHIgPSBOVUxMOworCisJYWNjX3NpemUgPSB0 dG1fYm9fZG1hX2FjY19zaXplKCZ2Z2Rldi0+bW1hbi5iZGV2LCBzaXplLAorCQkJCSAgICAgICBz aXplb2Yoc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0KSk7CisKKwlibyA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChibyA9PSBOVUxM KQorCQlyZXR1cm4gLUVOT01FTTsKKwlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOwor CXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQodmdkZXYtPmRkZXYsICZiby0+Z2VtX2Jhc2UsIHNp emUpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfZ2VtX2luaXQ7CisJYm8tPmR1bWIgPSBm YWxzZTsKKwl2aXJ0aW9fZ3B1X2luaXRfdHRtX3BsYWNlbWVudChibywgcGlubmVkKTsKKworCXJl dCA9IHR0bV9ib19pbml0KCZ2Z2Rldi0+bW1hbi5iZGV2LCAmYm8tPnRibywgc2l6ZSwgdHlwZSwK KwkJCSAgJmJvLT5wbGFjZW1lbnQsIDAsICFrZXJuZWwsIE5VTEwsIGFjY19zaXplLAorCQkJICBO VUxMLCBOVUxMLCAmdmlydGlvX2dwdV90dG1fYm9fZGVzdHJveSk7CisJaWYgKHJldCAhPSAwKQor CQlnb3RvIGVycl90dG1faW5pdDsKKworCSpib19wdHIgPSBibzsKKwlyZXR1cm4gMDsKKworZXJy X3R0bV9pbml0OgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW1fYmFzZSk7CitlcnJf Z2VtX2luaXQ6CisJa2ZyZWUoYm8pOworCXJldHVybiByZXQ7Cit9CisKK2ludCB2aXJ0aW9fZ3B1 X29iamVjdF9rbWFwKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqYm8sIHZvaWQgKipwdHIpCit7 CisJYm9vbCBpc19pb21lbTsKKwlpbnQgcjsKKworCWlmIChiby0+dm1hcCkgeworCQlpZiAocHRy KQorCQkJKnB0ciA9IGJvLT52bWFwOworCQlyZXR1cm4gMDsKKwl9CisJciA9IHR0bV9ib19rbWFw KCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdlcywgJmJvLT5rbWFwKTsKKwlpZiAocikKKwkJ cmV0dXJuIHI7CisJYm8tPnZtYXAgPSB0dG1fa21hcF9vYmpfdmlydHVhbCgmYm8tPmttYXAsICZp c19pb21lbSk7CisJaWYgKHB0cikKKwkJKnB0ciA9IGJvLT52bWFwOworCXJldHVybiAwOworfQor CitpbnQgdmlydGlvX2dwdV9vYmplY3RfZ2V0X3NnX3RhYmxlKHN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqcWRldiwKKwkJCQkgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQoreworCWlu dCByZXQ7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IGJvLT50Ym8udHRtLT5wYWdlczsKKwlpbnQg bnJfcGFnZXMgPSBiby0+dGJvLm51bV9wYWdlczsKKworCS8qIHd0ZiBzd2FwcGluZyAqLworCWlm IChiby0+cGFnZXMpCisJCXJldHVybiAwOworCisJaWYgKGJvLT50Ym8udHRtLT5zdGF0ZSA9PSB0 dF91bnBvcHVsYXRlZCkKKwkJYm8tPnRiby50dG0tPmJkZXYtPmRyaXZlci0+dHRtX3R0X3BvcHVs YXRlKGJvLT50Ym8udHRtKTsKKwliby0+cGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2df dGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvLT5wYWdlcykKKwkJZ290byBvdXQ7CisKKwly ZXQgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKGJvLT5wYWdlcywgcGFnZXMsIG5yX3BhZ2Vz LCAwLAorCQkJCQlucl9wYWdlcyA8PCBQQUdFX1NISUZULCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0 KQorCQlnb3RvIG91dDsKKwlyZXR1cm4gMDsKK291dDoKKwlrZnJlZShiby0+cGFnZXMpOworCWJv LT5wYWdlcyA9IE5VTEw7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgdmlydGlvX2dwdV9v YmplY3RfZnJlZV9zZ190YWJsZShzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQoreworCXNn X2ZyZWVfdGFibGUoYm8tPnBhZ2VzKTsKKwlrZnJlZShiby0+cGFnZXMpOworCWJvLT5wYWdlcyA9 IE5VTEw7Cit9CisKK2ludCB2aXJ0aW9fZ3B1X29iamVjdF93YWl0KHN0cnVjdCB2aXJ0aW9fZ3B1 X29iamVjdCAqYm8sIGJvb2wgbm9fd2FpdCkKK3sKKwlpbnQgcjsKKworCXIgPSB0dG1fYm9fcmVz ZXJ2ZSgmYm8tPnRibywgdHJ1ZSwgbm9fd2FpdCwgZmFsc2UsIE5VTEwpOworCWlmICh1bmxpa2Vs eShyICE9IDApKQorCQlyZXR1cm4gcjsKKwlyID0gdHRtX2JvX3dhaXQoJmJvLT50Ym8sIHRydWUs IHRydWUsIG5vX3dhaXQpOworCXR0bV9ib191bnJlc2VydmUoJmJvLT50Ym8pOworCXJldHVybiBy OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcGxhbmUu YyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzQxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcGxhbmUuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAq IENvcHlyaWdodCAoQykgMjAxNSBSZWQgSGF0LCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRo b3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFC SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJ VFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgorICovCisKKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorI2luY2x1ZGUgPGRybS9kcm1f cGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisKK3N0 YXRpYyBjb25zdCB1aW50MzJfdCB2aXJ0aW9fZ3B1X2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFU X1hSR0I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9CR1JYODg4OCwK KwlEUk1fRk9STUFUX0JHUkE4ODg4LAorCURSTV9GT1JNQVRfUkdCWDg4ODgsCisJRFJNX0ZPUk1B VF9SR0JBODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgs Cit9OworCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCit7CisJa2ZyZWUocGxhbmUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9mdW5jcyB2aXJ0aW9fZ3B1X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxh bmUJCT0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lCQk9 IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kJCT0gdmlydGlvX2dw dV9wbGFuZV9kZXN0cm95LAorCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVz ZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k dXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9wbGFu ZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmly dGlvX2dwdV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJ CQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rl diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRwdXQg PSBkcm1fY3J0Y190b192aXJ0aW9fZ3B1X291dHB1dChwbGFuZS0+Y3J0Yyk7CisJc3RydWN0IHZp cnRpb19ncHVfZnJhbWVidWZmZXIgKnZnZmI7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpi bzsKKwl1aW50MzJfdCBoYW5kbGU7CisKKwlpZiAocGxhbmUtPmZiKSB7CisJCXZnZmIgPSB0b192 aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyKHBsYW5lLT5mYik7CisJCWJvID0gZ2VtX3RvX3ZpcnRpb19n cHVfb2JqKHZnZmItPm9iaik7CisJCWhhbmRsZSA9IGJvLT5od19yZXNfaGFuZGxlOworCX0gZWxz ZSB7CisJCWhhbmRsZSA9IDA7CisJfQorCisJRFJNX0RFQlVHKCJoYW5kbGUgMHgleCwgY3J0YyAl ZHglZCslZCslZFxuIiwgaGFuZGxlLAorCQkgIHBsYW5lLT5zdGF0ZS0+Y3J0Y193LCBwbGFuZS0+ c3RhdGUtPmNydGNfaCwKKwkJICBwbGFuZS0+c3RhdGUtPmNydGNfeCwgcGxhbmUtPnN0YXRlLT5j cnRjX3kpOworCXZpcnRpb19ncHVfY21kX3NldF9zY2Fub3V0KHZnZGV2LCBvdXRwdXQtPmluZGV4 LCBoYW5kbGUsCisJCQkJICAgcGxhbmUtPnN0YXRlLT5jcnRjX3csCisJCQkJICAgcGxhbmUtPnN0 YXRlLT5jcnRjX2gsCisJCQkJICAgcGxhbmUtPnN0YXRlLT5jcnRjX3gsCisJCQkJICAgcGxhbmUt PnN0YXRlLT5jcnRjX3kpOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hl bHBlcl9mdW5jcyB2aXJ0aW9fZ3B1X3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2No ZWNrCQk9IHZpcnRpb19ncHVfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlCQk9 IHZpcnRpb19ncHVfcGxhbmVfYXRvbWljX3VwZGF0ZSwKK307CisKK3N0cnVjdCBkcm1fcGxhbmUg KnZpcnRpb19ncHVfcGxhbmVfaW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAor CQkJCQlpbnQgaW5kZXgpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHZnZGV2LT5kZGV2 OworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCWludCByZXQ7CisKKwlwbGFuZSA9IGt6YWxs b2Moc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwg cGxhbmUsIDEgPDwgaW5kZXgsCisJCQkJICAgICAgICZ2aXJ0aW9fZ3B1X3BsYW5lX2Z1bmNzLAor CQkJCSAgICAgICB2aXJ0aW9fZ3B1X2Zvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUodmly dGlvX2dwdV9mb3JtYXRzKSwKKwkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfcGxhbmVfaW5pdDsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRk KHBsYW5lLCAmdmlydGlvX2dwdV9wbGFuZV9oZWxwZXJfZnVuY3MpOworCXJldHVybiBwbGFuZTsK KworZXJyX3BsYW5lX2luaXQ6CisJa2ZyZWUocGxhbmUpOworCXJldHVybiBFUlJfUFRSKHJldCk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdHRtLmMgYi9k cml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZTBlNzRjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92aXJ0aW8vdmlydGdwdV90dG0uYwpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxNSBSZWQgSGF0LCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq IEF1dGhvcnM6CisgKiAgICBEYXZlIEFpcmxpZQorICogICAgQWxvbiBMZXZ5CisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBP UiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCisgKi8KKworI2luY2x1ZGUgPHR0bS90dG1fYm9fYXBpLmg+CisjaW5jbHVkZSA8dHRtL3R0 bV9ib19kcml2ZXIuaD4KKyNpbmNsdWRlIDx0dG0vdHRtX3BsYWNlbWVudC5oPgorI2luY2x1ZGUg PHR0bS90dG1fcGFnZV9hbGxvYy5oPgorI2luY2x1ZGUgPHR0bS90dG1fbW9kdWxlLmg+CisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtLmg+CisjaW5jbHVkZSAidmlydGdw dV9kcnYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgRFJNX0ZJTEVf UEFHRV9PRkZTRVQgKDB4MTAwMDAwMDAwVUxMID4+IFBBR0VfU0hJRlQpCisKK3N0YXRpYyBzdHJ1 Y3QKK3ZpcnRpb19ncHVfZGV2aWNlICp2aXJ0aW9fZ3B1X2dldF92Z2RldihzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9tbWFuICptbWFuOworCXN0cnVj dCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXY7CisKKwltbWFuID0gY29udGFpbmVyX29mKGJkZXYs IHN0cnVjdCB2aXJ0aW9fZ3B1X21tYW4sIGJkZXYpOworCXZnZGV2ID0gY29udGFpbmVyX29mKG1t YW4sIHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSwgbW1hbik7CisJcmV0dXJuIHZnZGV2OworfQor CitzdGF0aWMgaW50IHZpcnRpb19ncHVfdHRtX21lbV9nbG9iYWxfaW5pdChzdHJ1Y3QgZHJtX2ds b2JhbF9yZWZlcmVuY2UgKnJlZikKK3sKKwlyZXR1cm4gdHRtX21lbV9nbG9iYWxfaW5pdChyZWYt Pm9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfdHRtX21lbV9nbG9iYWxfcmVs ZWFzZShzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3sKKwl0dG1fbWVtX2dsb2Jh bF9yZWxlYXNlKHJlZi0+b2JqZWN0KTsKK30KKworc3RhdGljIGludCB2aXJ0aW9fZ3B1X3R0bV9n bG9iYWxfaW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KQoreworCXN0cnVjdCBk cm1fZ2xvYmFsX3JlZmVyZW5jZSAqZ2xvYmFsX3JlZjsKKwlpbnQgcjsKKworCXZnZGV2LT5tbWFu Lm1lbV9nbG9iYWxfcmVmZXJlbmNlZCA9IGZhbHNlOworCWdsb2JhbF9yZWYgPSAmdmdkZXYtPm1t YW4ubWVtX2dsb2JhbF9yZWY7CisJZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBEUk1fR0xPQkFM X1RUTV9NRU07CisJZ2xvYmFsX3JlZi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHRtX21lbV9nbG9i YWwpOworCWdsb2JhbF9yZWYtPmluaXQgPSAmdmlydGlvX2dwdV90dG1fbWVtX2dsb2JhbF9pbml0 OworCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmdmlydGlvX2dwdV90dG1fbWVtX2dsb2JhbF9yZWxl YXNlOworCisJciA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CisJaWYgKHIgIT0g MCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFRUTSBtZW1vcnkgYWNjb3VudGlu ZyAiCisJCQkgICJzdWJzeXN0ZW0uXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJdmdkZXYtPm1t YW4uYm9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CisJCXZnZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVm Lm9iamVjdDsKKwlnbG9iYWxfcmVmID0gJnZnZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmOwor CWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fQk87CisJZ2xvYmFsX3Jl Zi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHRtX2JvX2dsb2JhbCk7CisJZ2xvYmFsX3JlZi0+aW5p dCA9ICZ0dG1fYm9fZ2xvYmFsX2luaXQ7CisJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZ0dG1fYm9f Z2xvYmFsX3JlbGVhc2U7CisJciA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CisJ aWYgKHIgIT0gMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFRUTSBCTyBzdWJz eXN0ZW0uXG4iKTsKKwkJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZ2Z2Rldi0+bW1hbi5tZW1fZ2xv YmFsX3JlZik7CisJCXJldHVybiByOworCX0KKworCXZnZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVm ZXJlbmNlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVf dHRtX2dsb2JhbF9maW5pKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpCit7CisJaWYg KHZnZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCkgeworCQlkcm1fZ2xvYmFsX2l0ZW1f dW5yZWYoJnZnZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmKTsKKwkJZHJtX2dsb2JhbF9pdGVt X3VucmVmKCZ2Z2Rldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZik7CisJCXZnZGV2LT5tbWFuLm1lbV9n bG9iYWxfcmVmZXJlbmNlZCA9IGZhbHNlOworCX0KK30KKworI2lmIDAKKy8qCisgKiBIbW0sIHNl ZW1zIHRvIG5vdCBkbyBhbnl0aGluZyB1c2VmdWwuICBMZWZ0b3ZlciBkZWJ1ZyBoYWNrPworICog U29tZXRoaW5nIGxpa2UgcHJpbnRpbmcgcGFnZWZhdWx0cyB0byBrZXJuZWwgbG9nPworICovCitz dGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpcnRpb19ncHVfdHRtX3ZtX29wczsK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnR0bV92bV9vcHM7CisK K3N0YXRpYyBpbnQgdmlydGlvX2dwdV90dG1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsCisJCQkJc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICpibzsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2OworCWludCByOworCisJ Ym8gPSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopdm1hLT52bV9wcml2YXRlX2RhdGE7CisJ aWYgKGJvID09IE5VTEwpCisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CisJdmdkZXYgPSB2aXJ0 aW9fZ3B1X2dldF92Z2Rldihiby0+YmRldik7CisJciA9IHR0bV92bV9vcHMtPmZhdWx0KHZtYSwg dm1mKTsKKwlyZXR1cm4gcjsKK30KKyNlbmRpZgorCitpbnQgdmlydGlvX2dwdV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2OworCWlu dCByOworCisJZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXZnZGV2ID0gZmlsZV9w cml2LT5taW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAodmdkZXYgPT0gTlVMTCkgeworCQlE Uk1fRVJST1IoCisJCSAiZmlscC0+cHJpdmF0ZV9kYXRhLT5taW5vci0+ZGV2LT5kZXZfcHJpdmF0 ZSA9PSBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSB0dG1fYm9fbW1hcChm aWxwLCB2bWEsICZ2Z2Rldi0+bW1hbi5iZGV2KTsKKyNpZiAwCisJaWYgKHVubGlrZWx5KHIgIT0g MCkpCisJCXJldHVybiByOworCWlmICh1bmxpa2VseSh0dG1fdm1fb3BzID09IE5VTEwpKSB7CisJ CXR0bV92bV9vcHMgPSB2bWEtPnZtX29wczsKKwkJdmlydGlvX2dwdV90dG1fdm1fb3BzID0gKnR0 bV92bV9vcHM7CisJCXZpcnRpb19ncHVfdHRtX3ZtX29wcy5mYXVsdCA9ICZ2aXJ0aW9fZ3B1X3R0 bV9mYXVsdDsKKwl9CisJdm1hLT52bV9vcHMgPSAmdmlydGlvX2dwdV90dG1fdm1fb3BzOworCXJl dHVybiAwOworI2Vsc2UKKwlyZXR1cm4gcjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHZpcnRp b19ncHVfaW52YWxpZGF0ZV9jYWNoZXMoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJ CXVpbnQzMl90IGZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR0bV9ib19t YW5fZ2V0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkgICAgICAg c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHRt X3BsYWNlICpwbGFjZSwKKwkJCSAgICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlt ZW0tPm1tX25vZGUgPSAodm9pZCAqKTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHR0 bV9ib19tYW5fcHV0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkJ c3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJbWVtLT5tbV9ub2RlID0gKHZvaWQgKilOVUxM OworCXJldHVybjsKK30KKworc3RhdGljIGludCB0dG1fYm9fbWFuX2luaXQoc3RydWN0IHR0bV9t ZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkgICB1bnNpZ25lZCBsb25nIHBfc2l6ZSkKK3sKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dG1fYm9fbWFuX3Rha2Vkb3duKHN0cnVjdCB0dG1f bWVtX3R5cGVfbWFuYWdlciAqbWFuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0 dG1fYm9fbWFuX2RlYnVnKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAorCQkJICAg ICBjb25zdCBjaGFyICpwcmVmaXgpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHRtX21l bV90eXBlX21hbmFnZXJfZnVuYyB2aXJ0aW9fZ3B1X2JvX21hbmFnZXJfZnVuYyA9IHsKKwl0dG1f Ym9fbWFuX2luaXQsCisJdHRtX2JvX21hbl90YWtlZG93biwKKwl0dG1fYm9fbWFuX2dldF9ub2Rl LAorCXR0bV9ib19tYW5fcHV0X25vZGUsCisJdHRtX2JvX21hbl9kZWJ1ZworfTsKKworc3RhdGlj IGludCB2aXJ0aW9fZ3B1X2luaXRfbWVtX3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYs IHVpbnQzMl90IHR5cGUsCisJCQkJICAgIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFu KQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXY7CisKKwl2Z2RldiA9IHZpcnRp b19ncHVfZ2V0X3ZnZGV2KGJkZXYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUVE1fUExf U1lTVEVNOgorCQkvKiBTeXN0ZW0gbWVtb3J5ICovCisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQ RV9GTEFHX01BUFBBQkxFOworCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tf Q0FDSElORzsKKwkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJ CWJyZWFrOworCWNhc2UgVFRNX1BMX1RUOgorCQltYW4tPmZ1bmMgPSAmdmlydGlvX2dwdV9ib19t YW5hZ2VyX2Z1bmM7CisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOwor CQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKKwkJbWFuLT5k ZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgbWVtb3J5IHR5cGUgJXVcbiIsICh1bnNpZ25lZCl0 eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCB2aXJ0aW9fZ3B1X2V2aWN0X2ZsYWdzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJ CQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCkKK3sKKwlzdGF0aWMgc3RydWN0IHR0 bV9wbGFjZSBwbGFjZW1lbnRzID0geworCQkuZnBmbiAgPSAwLAorCQkubHBmbiAgPSAwLAorCQku ZmxhZ3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNLAorCX07CisK KwlwbGFjZW1lbnQtPnBsYWNlbWVudCA9ICZwbGFjZW1lbnRzOworCXBsYWNlbWVudC0+YnVzeV9w bGFjZW1lbnQgPSAmcGxhY2VtZW50czsKKwlwbGFjZW1lbnQtPm51bV9wbGFjZW1lbnQgPSAxOwor CXBsYWNlbWVudC0+bnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKKwlyZXR1cm47Cit9CisKK3N0YXRp YyBpbnQgdmlydGlvX2dwdV92ZXJpZnlfYWNjZXNzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym8sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZpcnRpb19ncHVfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9fZGV2aWNl ICpiZGV2LAorCQkJCQkgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJc3RydWN0IHR0bV9t ZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbS0+bWVtX3R5cGVdOworCisJbWVt LT5idXMuYWRkciA9IE5VTEw7CisJbWVtLT5idXMub2Zmc2V0ID0gMDsKKwltZW0tPmJ1cy5zaXpl ID0gbWVtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwltZW0tPmJ1cy5iYXNlID0gMDsKKwlt ZW0tPmJ1cy5pc19pb21lbSA9IGZhbHNlOworCWlmICghKG1hbi0+ZmxhZ3MgJiBUVE1fTUVNVFlQ RV9GTEFHX01BUFBBQkxFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChtZW0tPm1lbV90 eXBlKSB7CisJY2FzZSBUVE1fUExfU1lTVEVNOgorCWNhc2UgVFRNX1BMX1RUOgorCQkvKiBzeXN0 ZW0gbWVtb3J5ICovCisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwor CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV90dG1faW9fbWVtX2Zy ZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJICAgICAgIHN0cnVjdCB0dG1fbWVt X3JlZyAqbWVtKQoreworfQorCisvKgorICogVFRNIGJhY2tlbmQgZnVuY3Rpb25zLgorICovCitz dHJ1Y3QgdmlydGlvX2dwdV90dG1fdHQgeworCXN0cnVjdCB0dG1fZG1hX3R0CQl0dG07CisJc3Ry dWN0IHZpcnRpb19ncHVfZGV2aWNlCSp2Z2RldjsKKwl1NjQJCQkJb2Zmc2V0OworfTsKKworc3Rh dGljIGludCB2aXJ0aW9fZ3B1X3R0bV9iYWNrZW5kX2JpbmQoc3RydWN0IHR0bV90dCAqdHRtLAor CQkJCSAgICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSkKK3sKKwlzdHJ1Y3QgdmlydGlv X2dwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOworCisJZ3R0LT5vZmZzZXQgPSAodW5zaWdu ZWQgbG9uZykoYm9fbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUKTsKKwlpZiAoIXR0bS0+bnVtX3Bh Z2VzKQorCQlXQVJOKDEsICJub3RoaW5nIHRvIGJpbmQgJWx1IHBhZ2VzIGZvciBtcmVnICVwIGJh Y2sgJXAhXG4iLAorCQkgICAgIHR0bS0+bnVtX3BhZ2VzLCBib19tZW0sIHR0bSk7CisKKwkvKiBO b3QgaW1wbGVtZW50ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aXJ0aW9fZ3B1 X3R0bV9iYWNrZW5kX3VuYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0pCit7CisJLyogTm90IGltcGxl bWVudGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfdHRtX2Jh Y2tlbmRfZGVzdHJveShzdHJ1Y3QgdHRtX3R0ICp0dG0pCit7CisJc3RydWN0IHZpcnRpb19ncHVf dHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKKworCXR0bV9kbWFfdHRfZmluaSgmZ3R0LT50dG0p OworCWtmcmVlKGd0dCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHRtX2JhY2tlbmRfZnVuYyB2aXJ0 aW9fZ3B1X2JhY2tlbmRfZnVuYyA9IHsKKwkuYmluZCA9ICZ2aXJ0aW9fZ3B1X3R0bV9iYWNrZW5k X2JpbmQsCisJLnVuYmluZCA9ICZ2aXJ0aW9fZ3B1X3R0bV9iYWNrZW5kX3VuYmluZCwKKwkuZGVz dHJveSA9ICZ2aXJ0aW9fZ3B1X3R0bV9iYWNrZW5kX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50 IHZpcnRpb19ncHVfdHRtX3R0X3BvcHVsYXRlKHN0cnVjdCB0dG1fdHQgKnR0bSkKK3sKKwlpZiAo dHRtLT5zdGF0ZSAhPSB0dF91bnBvcHVsYXRlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdHRt X3Bvb2xfcG9wdWxhdGUodHRtKTsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV90dG1fdHRf dW5wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0pCit7CisJdHRtX3Bvb2xfdW5wb3B1bGF0ZSh0 dG0pOworfQorCitzdGF0aWMgc3RydWN0IHR0bV90dCAqdmlydGlvX2dwdV90dG1fdHRfY3JlYXRl KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBz aXplLAorCQkJCQkgICAgICAgdWludDMyX3QgcGFnZV9mbGFncywKKwkJCQkJICAgICAgIHN0cnVj dCBwYWdlICpkdW1teV9yZWFkX3BhZ2UpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV90dG1fdHQgKmd0dDsKKworCXZnZGV2ID0gdmlydGlv X2dwdV9nZXRfdmdkZXYoYmRldik7CisJZ3R0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZpcnRp b19ncHVfdHRtX3R0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGd0dCA9PSBOVUxMKQorCQlyZXR1cm4g TlVMTDsKKwlndHQtPnR0bS50dG0uZnVuYyA9ICZ2aXJ0aW9fZ3B1X2JhY2tlbmRfZnVuYzsKKwln dHQtPnZnZGV2ID0gdmdkZXY7CisJaWYgKHR0bV9kbWFfdHRfaW5pdCgmZ3R0LT50dG0sIGJkZXYs IHNpemUsIHBhZ2VfZmxhZ3MsCisJCQkgICAgZHVtbXlfcmVhZF9wYWdlKSkgeworCQlrZnJlZShn dHQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuICZndHQtPnR0bS50dG07Cit9CisKK3N0 YXRpYyB2b2lkIHZpcnRpb19ncHVfbW92ZV9udWxsKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym8sCisJCQkJIHN0cnVjdCB0dG1fbWVtX3JlZyAqbmV3X21lbSkKK3sKKwlzdHJ1Y3QgdHRtX21l bV9yZWcgKm9sZF9tZW0gPSAmYm8tPm1lbTsKKworCUJVR19PTihvbGRfbWVtLT5tbV9ub2RlICE9 IE5VTEwpOworCSpvbGRfbWVtID0gKm5ld19tZW07CisJbmV3X21lbS0+bW1fbm9kZSA9IE5VTEw7 Cit9CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9ib19tb3ZlKHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8sCisJCQkgICAgICBib29sIGV2aWN0LCBib29sIGludGVycnVwdGlibGUsCisJCQkg ICAgICBib29sIG5vX3dhaXRfZ3B1LAorCQkJICAgICAgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdf bWVtKQoreworCXZpcnRpb19ncHVfbW92ZV9udWxsKGJvLCBuZXdfbWVtKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgdmlydGlvX2dwdV9ib19tb3ZlX25vdGlmeShzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKnRibywKKwkJCQkgICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0p Cit7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibzsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9k ZXZpY2UgKnZnZGV2OworCisJYm8gPSBjb250YWluZXJfb2YodGJvLCBzdHJ1Y3QgdmlydGlvX2dw dV9vYmplY3QsIHRibyk7CisJdmdkZXYgPSAoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICopYm8t PmdlbV9iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIW5ld19tZW0gfHwgKG5ld19tZW0t PnBsYWNlbWVudCAmIFRUTV9QTF9GTEFHX1NZU1RFTSkpIHsKKwkJaWYgKGJvLT5od19yZXNfaGFu ZGxlKQorCQkJdmlydGlvX2dwdV9jbWRfcmVzb3VyY2VfaW52YWxfYmFja2luZyh2Z2RldiwKKwkJ CQkJCQkgICBiby0+aHdfcmVzX2hhbmRsZSk7CisKKwl9IGVsc2UgaWYgKG5ld19tZW0tPnBsYWNl bWVudCAmIFRUTV9QTF9GTEFHX1RUKSB7CisJCWlmIChiby0+aHdfcmVzX2hhbmRsZSkgeworCQkJ dmlydGlvX2dwdV9vYmplY3RfYXR0YWNoKHZnZGV2LCBibywgYm8tPmh3X3Jlc19oYW5kbGUsCisJ CQkJCQkgTlVMTCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfYm9fc3dh cF9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pCit7CisJc3RydWN0IHZpcnRp b19ncHVfb2JqZWN0ICpibzsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2OworCisJ Ym8gPSBjb250YWluZXJfb2YodGJvLCBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QsIHRibyk7CisJ dmdkZXYgPSAoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICopYm8tPmdlbV9iYXNlLmRldi0+ZGV2 X3ByaXZhdGU7CisKKwlpZiAoYm8tPnBhZ2VzKQorCQl2aXJ0aW9fZ3B1X29iamVjdF9mcmVlX3Nn X3RhYmxlKGJvKTsKK30KKworc3RhdGljIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHZpcnRpb19ncHVf Ym9fZHJpdmVyID0geworCS50dG1fdHRfY3JlYXRlID0gJnZpcnRpb19ncHVfdHRtX3R0X2NyZWF0 ZSwKKwkudHRtX3R0X3BvcHVsYXRlID0gJnZpcnRpb19ncHVfdHRtX3R0X3BvcHVsYXRlLAorCS50 dG1fdHRfdW5wb3B1bGF0ZSA9ICZ2aXJ0aW9fZ3B1X3R0bV90dF91bnBvcHVsYXRlLAorCS5pbnZh bGlkYXRlX2NhY2hlcyA9ICZ2aXJ0aW9fZ3B1X2ludmFsaWRhdGVfY2FjaGVzLAorCS5pbml0X21l bV90eXBlID0gJnZpcnRpb19ncHVfaW5pdF9tZW1fdHlwZSwKKwkuZXZpY3RfZmxhZ3MgPSAmdmly dGlvX2dwdV9ldmljdF9mbGFncywKKwkubW92ZSA9ICZ2aXJ0aW9fZ3B1X2JvX21vdmUsCisJLnZl cmlmeV9hY2Nlc3MgPSAmdmlydGlvX2dwdV92ZXJpZnlfYWNjZXNzLAorCS5pb19tZW1fcmVzZXJ2 ZSA9ICZ2aXJ0aW9fZ3B1X3R0bV9pb19tZW1fcmVzZXJ2ZSwKKwkuaW9fbWVtX2ZyZWUgPSAmdmly dGlvX2dwdV90dG1faW9fbWVtX2ZyZWUsCisJLm1vdmVfbm90aWZ5ID0gJnZpcnRpb19ncHVfYm9f bW92ZV9ub3RpZnksCisJLnN3YXBfbm90aWZ5ID0gJnZpcnRpb19ncHVfYm9fc3dhcF9ub3RpZnks Cit9OworCitpbnQgdmlydGlvX2dwdV90dG1faW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ug KnZnZGV2KQoreworCWludCByOworCisJciA9IHZpcnRpb19ncHVfdHRtX2dsb2JhbF9pbml0KHZn ZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTm8gb3RoZXJzIHVzZXIgb2YgYWRkcmVz cyBzcGFjZSBzbyBzZXQgaXQgdG8gMCAqLworCXIgPSB0dG1fYm9fZGV2aWNlX2luaXQoJnZnZGV2 LT5tbWFuLmJkZXYsCisJCQkgICAgICAgdmdkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWYub2Jq ZWN0LAorCQkJICAgICAgICZ2aXJ0aW9fZ3B1X2JvX2RyaXZlciwKKwkJCSAgICAgICB2Z2Rldi0+ ZGRldi0+YW5vbl9pbm9kZS0+aV9tYXBwaW5nLAorCQkJICAgICAgIERSTV9GSUxFX1BBR0VfT0ZG U0VULCAwKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImZhaWxlZCBpbml0aWFsaXppbmcgYnVm ZmVyIG9iamVjdCBkcml2ZXIoJWQpLlxuIiwgcik7CisJCWdvdG8gZXJyX2Rldl9pbml0OworCQly ZXR1cm4gcjsKKwl9CisKKwlyID0gdHRtX2JvX2luaXRfbW0oJnZnZGV2LT5tbWFuLmJkZXYsIFRU TV9QTF9UVCwgMCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgaW5pdGlhbGl6aW5n IEdUVCBoZWFwLlxuIik7CisJCWdvdG8gZXJyX21tX2luaXQ7CisJCXJldHVybiByOworCX0KKwly ZXR1cm4gMDsKKworZXJyX21tX2luaXQ6CisJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZ2Z2Rldi0+ bW1hbi5iZGV2KTsKK2Vycl9kZXZfaW5pdDoKKwl2aXJ0aW9fZ3B1X3R0bV9nbG9iYWxfZmluaSh2 Z2Rldik7CisJcmV0dXJuIHI7Cit9CisKK3ZvaWQgdmlydGlvX2dwdV90dG1fZmluaShzdHJ1Y3Qg dmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KQoreworCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmdmdk ZXYtPm1tYW4uYmRldik7CisJdmlydGlvX2dwdV90dG1fZ2xvYmFsX2ZpbmkodmdkZXYpOworCURS TV9JTkZPKCJ2aXJ0aW9fZ3B1OiB0dG0gZmluYWxpemVkXG4iKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X3ZxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ1YzBh ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cS5j CkBAIC0wLDAgKzEsNjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQsIElu Yy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgIERhdmUg QWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKiAgICBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxA cmVkaGF0LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1Ig SVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RI RVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJ2aXJ0Z3B1X2Ry di5oIgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19j b25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorCisjZGVmaW5lIE1BWF9J TkxJTkVfQ01EX1NJWkUgICA5NgorI2RlZmluZSBNQVhfSU5MSU5FX1JFU1BfU0laRSAgMjQKKyNk ZWZpbmUgVkJVRkZFUl9TSVpFICAgICAgICAgIChzaXplb2Yoc3RydWN0IHZpcnRpb19ncHVfdmJ1 ZmZlcikgXAorCQkJICAgICAgICsgTUFYX0lOTElORV9DTURfU0laRQkJIFwKKwkJCSAgICAgICAr IE1BWF9JTkxJTkVfUkVTUF9TSVpFKQorCit2b2lkIHZpcnRpb19ncHVfcmVzb3VyY2VfaWRfZ2V0 KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJdWludDMyX3QgKnJlc2lkKQor eworCWludCBoYW5kbGU7CisKKwlpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlzcGluX2xvY2so JnZnZGV2LT5yZXNvdXJjZV9pZHJfbG9jayk7CisJaGFuZGxlID0gaWRyX2FsbG9jKCZ2Z2Rldi0+ cmVzb3VyY2VfaWRyLCBOVUxMLCAxLCAwLCBHRlBfTk9XQUlUKTsKKwlzcGluX3VubG9jaygmdmdk ZXYtPnJlc291cmNlX2lkcl9sb2NrKTsKKwlpZHJfcHJlbG9hZF9lbmQoKTsKKwkqcmVzaWQgPSBo YW5kbGU7Cit9CisKK3ZvaWQgdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9wdXQoc3RydWN0IHZpcnRp b19ncHVfZGV2aWNlICp2Z2RldiwgdWludDMyX3QgaWQpCit7CisJc3Bpbl9sb2NrKCZ2Z2Rldi0+ cmVzb3VyY2VfaWRyX2xvY2spOworCWlkcl9yZW1vdmUoJnZnZGV2LT5yZXNvdXJjZV9pZHIsIGlk KTsKKwlzcGluX3VubG9jaygmdmdkZXYtPnJlc291cmNlX2lkcl9sb2NrKTsKK30KKwordm9pZCB2 aXJ0aW9fZ3B1X2N0cmxfYWNrKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSB2cS0+dmRldi0+cHJpdjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ug KnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzY2hlZHVsZV93b3JrKCZ2Z2Rldi0+Y3RybHEu ZGVxdWV1ZV93b3JrKTsKK30KKwordm9pZCB2aXJ0aW9fZ3B1X2N1cnNvcl9hY2soc3RydWN0IHZp cnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHZxLT52ZGV2LT5wcml2 OworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOwor CXNjaGVkdWxlX3dvcmsoJnZnZGV2LT5jdXJzb3JxLmRlcXVldWVfd29yayk7Cit9CisKK2ludCB2 aXJ0aW9fZ3B1X2FsbG9jX3ZidWZzKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpCit7 CisJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKKwlpbnQgaSwgc2l6ZSwgY291bnQg PSAwOworCXZvaWQgKnB0cjsKKworCUlOSVRfTElTVF9IRUFEKCZ2Z2Rldi0+ZnJlZV92YnVmcyk7 CisJY291bnQgKz0gdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHZnZGV2LT5jdHJscS52cSk7CisJ Y291bnQgKz0gdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHZnZGV2LT5jdXJzb3JxLnZxKTsKKwlz aXplID0gY291bnQgKiBWQlVGRkVSX1NJWkU7CisJRFJNX0lORk8oInZpcnRpbyB2YnVmZmVyczog JWQgYnVmcywgJXpkQiBlYWNoLCAlZGtCIHRvdGFsLlxuIiwKKwkJIGNvdW50LCBWQlVGRkVSX1NJ WkUsIHNpemUgLyAxMDI0KTsKKworCXZnZGV2LT52YnVmcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCF2Z2Rldi0+dmJ1ZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChp ID0gMCwgcHRyID0gdmdkZXYtPnZidWZzOworCSAgICAgaSA8IGNvdW50OworCSAgICAgaSsrLCBw dHIgKz0gVkJVRkZFUl9TSVpFKSB7CisJCXZidWYgPSBwdHI7CisJCWxpc3RfYWRkKCZ2YnVmLT5s aXN0LCAmdmdkZXYtPmZyZWVfdmJ1ZnMpOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB2aXJ0 aW9fZ3B1X2ZyZWVfdmJ1ZnMoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldikKK3sKKwlz dHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCWludCBpLCBjb3VudCA9IDA7CisKKwlj b3VudCArPSB2aXJ0cXVldWVfZ2V0X3ZyaW5nX3NpemUodmdkZXYtPmN0cmxxLnZxKTsKKwljb3Vu dCArPSB2aXJ0cXVldWVfZ2V0X3ZyaW5nX3NpemUodmdkZXYtPmN1cnNvcnEudnEpOworCisJZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKFdBUk5fT04obGlzdF9lbXB0eSgmdmdk ZXYtPmZyZWVfdmJ1ZnMpKSkKKwkJCXJldHVybjsKKwkJdmJ1ZiA9IGxpc3RfZmlyc3RfZW50cnko JnZnZGV2LT5mcmVlX3ZidWZzLAorCQkJCQlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyLCBsaXN0 KTsKKwkJbGlzdF9kZWwoJnZidWYtPmxpc3QpOworCX0KKwlrZnJlZSh2Z2Rldi0+dmJ1ZnMpOwor fQorCitzdGF0aWMgc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlcioKK3ZpcnRpb19ncHVfZ2V0X3Zi dWYoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJICAgIGludCBzaXplLCBpbnQg cmVzcF9zaXplLCB2b2lkICpyZXNwX2J1ZiwKKwkJICAgIHZpcnRpb19ncHVfcmVzcF9jYiByZXNw X2NiKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwlCVUdfT04obGlz dF9lbXB0eSgmdmdkZXYtPmZyZWVfdmJ1ZnMpKTsKKwl2YnVmID0gbGlzdF9maXJzdF9lbnRyeSgm dmdkZXYtPmZyZWVfdmJ1ZnMsCisJCQkJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciwgbGlzdCk7 CisJbGlzdF9kZWwoJnZidWYtPmxpc3QpOworCW1lbXNldCh2YnVmLCAwLCBWQlVGRkVSX1NJWkUp OworCisJQlVHX09OKHNpemUgPj0gTUFYX0lOTElORV9DTURfU0laRSk7CisJdmJ1Zi0+YnVmID0g KHZvaWQgKil2YnVmICsgc2l6ZW9mKCp2YnVmKTsKKwl2YnVmLT5zaXplID0gc2l6ZTsKKworCXZi dWYtPnJlc3BfY2IgPSByZXNwX2NiOworCXZidWYtPnJlc3Bfc2l6ZSA9IHJlc3Bfc2l6ZTsKKwlp ZiAocmVzcF9zaXplIDw9IE1BWF9JTkxJTkVfUkVTUF9TSVpFKQorCQl2YnVmLT5yZXNwX2J1ZiA9 ICh2b2lkICopdmJ1Zi0+YnVmICsgc2l6ZTsKKwllbHNlCisJCXZidWYtPnJlc3BfYnVmID0gcmVz cF9idWY7CisJQlVHX09OKCF2YnVmLT5yZXNwX2J1Zik7CisJcmV0dXJuIHZidWY7Cit9CisKK3N0 YXRpYyB2b2lkICp2aXJ0aW9fZ3B1X2FsbG9jX2NtZChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ug KnZnZGV2LAorCQkJCSAgc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqKnZidWZmZXJfcCwKKwkJ CQkgIGludCBzaXplKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwl2 YnVmID0gdmlydGlvX2dwdV9nZXRfdmJ1Zih2Z2Rldiwgc2l6ZSwKKwkJCQkgICBzaXplb2Yoc3Ry dWN0IHZpcnRpb19ncHVfY3RybF9oZHIpLAorCQkJCSAgIE5VTEwsIE5VTEwpOworCWlmIChJU19F UlIodmJ1ZikpIHsKKwkJKnZidWZmZXJfcCA9IE5VTEw7CisJCXJldHVybiBFUlJfQ0FTVCh2YnVm KTsKKwl9CisJKnZidWZmZXJfcCA9IHZidWY7CisJcmV0dXJuIHZidWYtPmJ1ZjsKK30KKworc3Rh dGljIHN0cnVjdCB2aXJ0aW9fZ3B1X3VwZGF0ZV9jdXJzb3IqCit2aXJ0aW9fZ3B1X2FsbG9jX2N1 cnNvcihzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJc3RydWN0IHZpcnRpb19n cHVfdmJ1ZmZlciAqKnZidWZmZXJfcCkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2 YnVmOworCisJdmJ1ZiA9IHZpcnRpb19ncHVfZ2V0X3ZidWYKKwkJKHZnZGV2LCBzaXplb2Yoc3Ry dWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciksCisJCSAwLCBOVUxMLCBOVUxMKTsKKwlpZiAo SVNfRVJSKHZidWYpKSB7CisJCSp2YnVmZmVyX3AgPSBOVUxMOworCQlyZXR1cm4gRVJSX0NBU1Qo dmJ1Zik7CisJfQorCSp2YnVmZmVyX3AgPSB2YnVmOworCXJldHVybiAoc3RydWN0IHZpcnRpb19n cHVfdXBkYXRlX2N1cnNvciAqKXZidWYtPmJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnZpcnRpb19n cHVfYWxsb2NfY21kX3Jlc3Aoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkg ICAgICAgdmlydGlvX2dwdV9yZXNwX2NiIGNiLAorCQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX2dw dV92YnVmZmVyICoqdmJ1ZmZlcl9wLAorCQkJCSAgICAgICBpbnQgY21kX3NpemUsIGludCByZXNw X3NpemUsCisJCQkJICAgICAgIHZvaWQgKnJlc3BfYnVmKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1 X3ZidWZmZXIgKnZidWY7CisKKwl2YnVmID0gdmlydGlvX2dwdV9nZXRfdmJ1Zih2Z2RldiwgY21k X3NpemUsCisJCQkJICAgcmVzcF9zaXplLCByZXNwX2J1ZiwgY2IpOworCWlmIChJU19FUlIodmJ1 ZikpIHsKKwkJKnZidWZmZXJfcCA9IE5VTEw7CisJCXJldHVybiBFUlJfQ0FTVCh2YnVmKTsKKwl9 CisJKnZidWZmZXJfcCA9IHZidWY7CisJcmV0dXJuIChzdHJ1Y3QgdmlydGlvX2dwdV9jb21tYW5k ICopdmJ1Zi0+YnVmOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3ZidWYoc3RydWN0IHZpcnRpb19n cHVfZGV2aWNlICp2Z2RldiwKKwkJICAgICAgc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1 ZikKK3sKKwlpZiAodmJ1Zi0+cmVzcF9zaXplID4gTUFYX0lOTElORV9SRVNQX1NJWkUpCisJCWtm cmVlKHZidWYtPnJlc3BfYnVmKTsKKwlrZnJlZSh2YnVmLT5kYXRhX2J1Zik7CisJbGlzdF9hZGQo JnZidWYtPmxpc3QsICZ2Z2Rldi0+ZnJlZV92YnVmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2xh aW1fdmJ1ZnMoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBsaXN0X2hlYWQgKnJlY2xhaW1f bGlzdCkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCXVuc2lnbmVkIGlu dCBsZW47CisJaW50IGZyZWVkID0gMDsKKworCXdoaWxlICgodmJ1ZiA9IHZpcnRxdWV1ZV9nZXRf YnVmKHZxLCAmbGVuKSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmdmJ1Zi0+bGlzdCwgcmVjbGFpbV9s aXN0KTsKKwkJZnJlZWQrKzsKKwl9CisJaWYgKGZyZWVkID09IDApCisJCURSTV9ERUJVRygiSHVo PyB6ZXJvIHZidWZzIHJlY2xhaW1lZCIpOworfQorCit2b2lkIHZpcnRpb19ncHVfZGVxdWV1ZV9j dHJsX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHZpcnRpb19ncHVf ZGV2aWNlLAorCQkJICAgICBjdHJscS5kZXF1ZXVlX3dvcmspOworCXN0cnVjdCBsaXN0X2hlYWQg cmVjbGFpbV9saXN0OworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKmVudHJ5LCAqdG1wOwor CXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyICpyZXNwOworCXU2NCBmZW5jZV9pZCA9IDA7CisK KwlJTklUX0xJU1RfSEVBRCgmcmVjbGFpbV9saXN0KTsKKwlzcGluX2xvY2soJnZnZGV2LT5jdHJs cS5xbG9jayk7CisJZG8geworCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2Z2Rldi0+Y3RybHEudnEp OworCQlyZWNsYWltX3ZidWZzKHZnZGV2LT5jdHJscS52cSwgJnJlY2xhaW1fbGlzdCk7CisKKwl9 IHdoaWxlICghdmlydHF1ZXVlX2VuYWJsZV9jYih2Z2Rldi0+Y3RybHEudnEpKTsKKwlzcGluX3Vu bG9jaygmdmdkZXYtPmN0cmxxLnFsb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShl bnRyeSwgdG1wLCAmcmVjbGFpbV9saXN0LCBsaXN0KSB7CisJCXJlc3AgPSAoc3RydWN0IHZpcnRp b19ncHVfY3RybF9oZHIgKillbnRyeS0+cmVzcF9idWY7CisJCWlmIChyZXNwLT50eXBlICE9IGNw dV90b19sZTMyKFZJUlRJT19HUFVfUkVTUF9PS19OT0RBVEEpKQorCQkJRFJNX0RFQlVHKCJyZXNw b25zZSAweCV4XG4iLCBsZTMyX3RvX2NwdShyZXNwLT50eXBlKSk7CisJCWlmIChyZXNwLT5mbGFn cyAmIGNwdV90b19sZTMyKFZJUlRJT19HUFVfRkxBR19GRU5DRSkpIHsKKwkJCXU2NCBmID0gbGU2 NF90b19jcHUocmVzcC0+ZmVuY2VfaWQpOworCisJCQlpZiAoZmVuY2VfaWQgPiBmKSB7CisJCQkJ RFJNX0VSUk9SKCIlczogT29wczogZmVuY2UgJWxseCAtPiAlbGx4XG4iLAorCQkJCQkgIF9fZnVu Y19fLCBmZW5jZV9pZCwgZik7CisJCQl9IGVsc2UgeworCQkJCWZlbmNlX2lkID0gZjsKKwkJCX0K KwkJfQorCQlpZiAoZW50cnktPnJlc3BfY2IpCisJCQllbnRyeS0+cmVzcF9jYih2Z2RldiwgZW50 cnkpOworCisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWZyZWVfdmJ1Zih2Z2RldiwgZW50 cnkpOworCX0KKwl3YWtlX3VwKCZ2Z2Rldi0+Y3RybHEuYWNrX3F1ZXVlKTsKKworCWlmIChmZW5j ZV9pZCkKKwkJdmlydGlvX2dwdV9mZW5jZV9ldmVudF9wcm9jZXNzKHZnZGV2LCBmZW5jZV9pZCk7 Cit9CisKK3ZvaWQgdmlydGlvX2dwdV9kZXF1ZXVlX2N1cnNvcl9mdW5jKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0KKwkJY29u dGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSwKKwkJCSAgICAgY3Vyc29y cS5kZXF1ZXVlX3dvcmspOworCXN0cnVjdCBsaXN0X2hlYWQgcmVjbGFpbV9saXN0OworCXN0cnVj dCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKmVudHJ5LCAqdG1wOworCisJSU5JVF9MSVNUX0hFQUQoJnJl Y2xhaW1fbGlzdCk7CisJc3Bpbl9sb2NrKCZ2Z2Rldi0+Y3Vyc29ycS5xbG9jayk7CisJZG8gewor CQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2Z2Rldi0+Y3Vyc29ycS52cSk7CisJCXJlY2xhaW1fdmJ1 ZnModmdkZXYtPmN1cnNvcnEudnEsICZyZWNsYWltX2xpc3QpOworCX0gd2hpbGUgKCF2aXJ0cXVl dWVfZW5hYmxlX2NiKHZnZGV2LT5jdXJzb3JxLnZxKSk7CisJc3Bpbl91bmxvY2soJnZnZGV2LT5j dXJzb3JxLnFsb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAm cmVjbGFpbV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWZyZWVf dmJ1Zih2Z2RldiwgZW50cnkpOworCX0KKwl3YWtlX3VwKCZ2Z2Rldi0+Y3Vyc29ycS5hY2tfcXVl dWUpOworfQorCitzdGF0aWMgaW50IHZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZl ciAqdmJ1ZikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZnZGV2LT5jdHJscS52cTsKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1szXSwgdmNtZCwgdm91dCwgdnJlc3A7CisJaW50IG91dGNu dCA9IDAsIGluY250ID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCF2Z2Rldi0+dnFzX3JlYWR5KQor CQlyZXR1cm4gLUVOT0RFVjsKKworCXNnX2luaXRfb25lKCZ2Y21kLCB2YnVmLT5idWYsIHZidWYt PnNpemUpOworCXNnc1tvdXRjbnQraW5jbnRdID0gJnZjbWQ7CisJb3V0Y250Kys7CisKKwlpZiAo dmJ1Zi0+ZGF0YV9zaXplKSB7CisJCXNnX2luaXRfb25lKCZ2b3V0LCB2YnVmLT5kYXRhX2J1Ziwg dmJ1Zi0+ZGF0YV9zaXplKTsKKwkJc2dzW291dGNudCArIGluY250XSA9ICZ2b3V0OworCQlvdXRj bnQrKzsKKwl9CisKKwlpZiAodmJ1Zi0+cmVzcF9zaXplKSB7CisJCXNnX2luaXRfb25lKCZ2cmVz cCwgdmJ1Zi0+cmVzcF9idWYsIHZidWYtPnJlc3Bfc2l6ZSk7CisJCXNnc1tvdXRjbnQgKyBpbmNu dF0gPSAmdnJlc3A7CisJCWluY250Kys7CisJfQorCisJc3Bpbl9sb2NrKCZ2Z2Rldi0+Y3RybHEu cWxvY2spOworcmV0cnk6CisJcmV0ID0gdmlydHF1ZXVlX2FkZF9zZ3ModnEsIHNncywgb3V0Y250 LCBpbmNudCwgdmJ1ZiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA9PSAtRU5PU1BDKSB7CisJCXNw aW5fdW5sb2NrKCZ2Z2Rldi0+Y3RybHEucWxvY2spOworCQl3YWl0X2V2ZW50KHZnZGV2LT5jdHJs cS5hY2tfcXVldWUsIHZxLT5udW1fZnJlZSk7CisJCXNwaW5fbG9jaygmdmdkZXYtPmN0cmxxLnFs b2NrKTsKKwkJZ290byByZXRyeTsKKwl9IGVsc2UgeworCQl2aXJ0cXVldWVfa2ljayh2cSk7CisJ fQorCXNwaW5fdW5sb2NrKCZ2Z2Rldi0+Y3RybHEucWxvY2spOworCisJaWYgKCFyZXQpCisJCXJl dCA9IHZxLT5udW1fZnJlZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpcnRpb19n cHVfcXVldWVfY3Vyc29yKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJICAg c3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2 cSA9IHZnZGV2LT5jdXJzb3JxLnZxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dzWzFdLCBjY21k OworCWludCByZXQ7CisJaW50IG91dGNudDsKKworCWlmICghdmdkZXYtPnZxc19yZWFkeSkKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwlzZ19pbml0X29uZSgmY2NtZCwgdmJ1Zi0+YnVmLCB2YnVmLT5z aXplKTsKKwlzZ3NbMF0gPSAmY2NtZDsKKwlvdXRjbnQgPSAxOworCisJc3Bpbl9sb2NrKCZ2Z2Rl di0+Y3Vyc29ycS5xbG9jayk7CityZXRyeToKKwlyZXQgPSB2aXJ0cXVldWVfYWRkX3Nncyh2cSwg c2dzLCBvdXRjbnQsIDAsIHZidWYsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPT0gLUVOT1NQQykg eworCQlzcGluX3VubG9jaygmdmdkZXYtPmN1cnNvcnEucWxvY2spOworCQl3YWl0X2V2ZW50KHZn ZGV2LT5jdXJzb3JxLmFja19xdWV1ZSwgdnEtPm51bV9mcmVlKTsKKwkJc3Bpbl9sb2NrKCZ2Z2Rl di0+Y3Vyc29ycS5xbG9jayk7CisJCWdvdG8gcmV0cnk7CisJfSBlbHNlIHsKKwkJdmlydHF1ZXVl X2tpY2sodnEpOworCX0KKworCXNwaW5fdW5sb2NrKCZ2Z2Rldi0+Y3Vyc29ycS5xbG9jayk7CisK KwlpZiAoIXJldCkKKwkJcmV0ID0gdnEtPm51bV9mcmVlOworCXJldHVybiByZXQ7Cit9CisKKy8q IGp1c3QgY3JlYXRlIGdlbSBvYmplY3RzIGZvciB1c2Vyc3BhY2UgYW5kIGxvbmcgbGl2ZWQgb2Jq ZWN0cywKKyAgIGp1c3QgdXNlIGRtYV9hbGxvY2VkIHBhZ2VzIGZvciB0aGUgcXVldWUgb2JqZWN0 cz8gKi8KKworLyogY3JlYXRlIGEgYmFzaWMgcmVzb3VyY2UgKi8KK3ZvaWQgdmlydGlvX2dwdV9j bWRfY3JlYXRlX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJ ICAgIHVpbnQzMl90IHJlc291cmNlX2lkLAorCQkJCSAgICB1aW50MzJfdCBmb3JtYXQsCisJCQkJ ICAgIHVpbnQzMl90IHdpZHRoLAorCQkJCSAgICB1aW50MzJfdCBoZWlnaHQpCit7CisJc3RydWN0 IHZpcnRpb19ncHVfcmVzb3VyY2VfY3JlYXRlXzJkICpjbWRfcDsKKwlzdHJ1Y3QgdmlydGlvX2dw dV92YnVmZmVyICp2YnVmOworCisJY21kX3AgPSB2aXJ0aW9fZ3B1X2FsbG9jX2NtZCh2Z2Rldiwg JnZidWYsIHNpemVvZigqY21kX3ApKTsKKwltZW1zZXQoY21kX3AsIDAsIHNpemVvZigqY21kX3Ap KTsKKworCWNtZF9wLT5oZHIudHlwZSA9IGNwdV90b19sZTMyKFZJUlRJT19HUFVfQ01EX1JFU09V UkNFX0NSRUFURV8yRCk7CisJY21kX3AtPnJlc291cmNlX2lkID0gY3B1X3RvX2xlMzIocmVzb3Vy Y2VfaWQpOworCWNtZF9wLT5mb3JtYXQgPSBjcHVfdG9fbGUzMihmb3JtYXQpOworCWNtZF9wLT53 aWR0aCA9IGNwdV90b19sZTMyKHdpZHRoKTsKKwljbWRfcC0+aGVpZ2h0ID0gY3B1X3RvX2xlMzIo aGVpZ2h0KTsKKworCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYsIHZidWYpOwor fQorCit2b2lkIHZpcnRpb19ncHVfY21kX3VucmVmX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYsCisJCQkJICAgdWludDMyX3QgcmVzb3VyY2VfaWQpCit7CisJc3RydWN0 IHZpcnRpb19ncHVfcmVzb3VyY2VfdW5yZWYgKmNtZF9wOworCXN0cnVjdCB2aXJ0aW9fZ3B1X3Zi dWZmZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1 Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpjbWRfcCkpOwor CisJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfUkVTT1VSQ0Vf VU5SRUYpOworCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90b19sZTMyKHJlc291cmNlX2lkKTsK KworCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYsIHZidWYpOworfQorCit2b2lk IHZpcnRpb19ncHVfY21kX3Jlc291cmNlX2ludmFsX2JhY2tpbmcoc3RydWN0IHZpcnRpb19ncHVf ZGV2aWNlICp2Z2RldiwKKwkJCQkJICAgdWludDMyX3QgcmVzb3VyY2VfaWQpCit7CisJc3RydWN0 IHZpcnRpb19ncHVfcmVzb3VyY2VfZGV0YWNoX2JhY2tpbmcgKmNtZF9wOworCXN0cnVjdCB2aXJ0 aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZn ZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpj bWRfcCkpOworCisJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURf UkVTT1VSQ0VfREVUQUNIX0JBQ0tJTkcpOworCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90b19s ZTMyKHJlc291cmNlX2lkKTsKKworCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYs IHZidWYpOworfQorCit2b2lkIHZpcnRpb19ncHVfY21kX3NldF9zY2Fub3V0KHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJdWludDMyX3Qgc2Nhbm91dF9pZCwgdWludDMyX3Qg cmVzb3VyY2VfaWQsCisJCQkJdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCQl1 aW50MzJfdCB4LCB1aW50MzJfdCB5KQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X3NldF9zY2Fub3V0 ICpjbWRfcDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCisJY21kX3AgPSB2 aXJ0aW9fZ3B1X2FsbG9jX2NtZCh2Z2RldiwgJnZidWYsIHNpemVvZigqY21kX3ApKTsKKwltZW1z ZXQoY21kX3AsIDAsIHNpemVvZigqY21kX3ApKTsKKworCWNtZF9wLT5oZHIudHlwZSA9IGNwdV90 b19sZTMyKFZJUlRJT19HUFVfQ01EX1NFVF9TQ0FOT1VUKTsKKwljbWRfcC0+cmVzb3VyY2VfaWQg PSBjcHVfdG9fbGUzMihyZXNvdXJjZV9pZCk7CisJY21kX3AtPnNjYW5vdXRfaWQgPSBjcHVfdG9f bGUzMihzY2Fub3V0X2lkKTsKKwljbWRfcC0+ci53aWR0aCA9IGNwdV90b19sZTMyKHdpZHRoKTsK KwljbWRfcC0+ci5oZWlnaHQgPSBjcHVfdG9fbGUzMihoZWlnaHQpOworCWNtZF9wLT5yLnggPSBj cHVfdG9fbGUzMih4KTsKKwljbWRfcC0+ci55ID0gY3B1X3RvX2xlMzIoeSk7CisKKwl2aXJ0aW9f Z3B1X3F1ZXVlX2N0cmxfYnVmZmVyKHZnZGV2LCB2YnVmKTsKK30KKwordm9pZCB2aXJ0aW9fZ3B1 X2NtZF9yZXNvdXJjZV9mbHVzaChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJ CSAgIHVpbnQzMl90IHJlc291cmNlX2lkLAorCQkJCSAgIHVpbnQzMl90IHgsIHVpbnQzMl90IHks CisJCQkJICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKK3sKKwlzdHJ1Y3Qgdmly dGlvX2dwdV9yZXNvdXJjZV9mbHVzaCAqY21kX3A7CisJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZl ciAqdmJ1ZjsKKworCWNtZF9wID0gdmlydGlvX2dwdV9hbGxvY19jbWQodmdkZXYsICZ2YnVmLCBz aXplb2YoKmNtZF9wKSk7CisJbWVtc2V0KGNtZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7CisKKwlj bWRfcC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9GTFVT SCk7CisJY21kX3AtPnJlc291cmNlX2lkID0gY3B1X3RvX2xlMzIocmVzb3VyY2VfaWQpOworCWNt ZF9wLT5yLndpZHRoID0gY3B1X3RvX2xlMzIod2lkdGgpOworCWNtZF9wLT5yLmhlaWdodCA9IGNw dV90b19sZTMyKGhlaWdodCk7CisJY21kX3AtPnIueCA9IGNwdV90b19sZTMyKHgpOworCWNtZF9w LT5yLnkgPSBjcHVfdG9fbGUzMih5KTsKKworCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIo dmdkZXYsIHZidWYpOworfQorCit2b2lkIHZpcnRpb19ncHVfY21kX3RyYW5zZmVyX3RvX2hvc3Rf MmQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJdWludDMyX3QgcmVzb3Vy Y2VfaWQsIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkJX19sZTMyIHdpZHRoLCBfX2xlMzIgaGVpZ2h0 LAorCQkJCQlfX2xlMzIgeCwgX19sZTMyIHksCisJCQkJCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNl ICoqZmVuY2UpCit7CisJc3RydWN0IHZpcnRpb19ncHVfdHJhbnNmZXJfdG9faG9zdF8yZCAqY21k X3A7CisJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKKworCWNtZF9wID0gdmlydGlv X2dwdV9hbGxvY19jbWQodmdkZXYsICZ2YnVmLCBzaXplb2YoKmNtZF9wKSk7CisJbWVtc2V0KGNt ZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7CisKKwljbWRfcC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUz MihWSVJUSU9fR1BVX0NNRF9UUkFOU0ZFUl9UT19IT1NUXzJEKTsKKwljbWRfcC0+cmVzb3VyY2Vf aWQgPSBjcHVfdG9fbGUzMihyZXNvdXJjZV9pZCk7CisJY21kX3AtPm9mZnNldCA9IGNwdV90b19s ZTY0KG9mZnNldCk7CisJY21kX3AtPnIud2lkdGggPSB3aWR0aDsKKwljbWRfcC0+ci5oZWlnaHQg PSBoZWlnaHQ7CisJY21kX3AtPnIueCA9IHg7CisJY21kX3AtPnIueSA9IHk7CisKKwlpZiAoZmVu Y2UpCisJCXZpcnRpb19ncHVfZmVuY2VfZW1pdCh2Z2RldiwgJmNtZF9wLT5oZHIsIGZlbmNlKTsK Kwl2aXJ0aW9fZ3B1X3F1ZXVlX2N0cmxfYnVmZmVyKHZnZGV2LCB2YnVmKTsKK30KKworc3RhdGlj IHZvaWQKK3ZpcnRpb19ncHVfY21kX3Jlc291cmNlX2F0dGFjaF9iYWNraW5nKHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJICAgICAgIHVpbnQzMl90IHJlc291cmNlX2lkLAor CQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnkgKmVudHMsCisJCQkJICAgICAg IHVpbnQzMl90IG5lbnRzLAorCQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqKmZl bmNlKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X3Jlc291cmNlX2F0dGFjaF9iYWNraW5nICpjbWRf cDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCisJY21kX3AgPSB2aXJ0aW9f Z3B1X2FsbG9jX2NtZCh2Z2RldiwgJnZidWYsIHNpemVvZigqY21kX3ApKTsKKwltZW1zZXQoY21k X3AsIDAsIHNpemVvZigqY21kX3ApKTsKKworCWNtZF9wLT5oZHIudHlwZSA9IGNwdV90b19sZTMy KFZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0FUVEFDSF9CQUNLSU5HKTsKKwljbWRfcC0+cmVzb3Vy Y2VfaWQgPSBjcHVfdG9fbGUzMihyZXNvdXJjZV9pZCk7CisJY21kX3AtPm5yX2VudHJpZXMgPSBj cHVfdG9fbGUzMihuZW50cyk7CisKKwl2YnVmLT5kYXRhX2J1ZiA9IGVudHM7CisJdmJ1Zi0+ZGF0 YV9zaXplID0gc2l6ZW9mKCplbnRzKSAqIG5lbnRzOworCisJaWYgKGZlbmNlKQorCQl2aXJ0aW9f Z3B1X2ZlbmNlX2VtaXQodmdkZXYsICZjbWRfcC0+aGRyLCBmZW5jZSk7CisJdmlydGlvX2dwdV9x dWV1ZV9jdHJsX2J1ZmZlcih2Z2RldiwgdmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19n cHVfY21kX2dldF9kaXNwbGF5X2luZm9fY2Ioc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rl diwKKwkJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWYpCit7CisJc3Ry dWN0IHZpcnRpb19ncHVfcmVzcF9kaXNwbGF5X2luZm8gKnJlc3AgPQorCQkoc3RydWN0IHZpcnRp b19ncHVfcmVzcF9kaXNwbGF5X2luZm8gKil2YnVmLT5yZXNwX2J1ZjsKKwlpbnQgaTsKKworCXNw aW5fbG9jaygmdmdkZXYtPmRpc3BsYXlfaW5mb19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgdmdk ZXYtPm51bV9zY2Fub3V0czsgaSsrKSB7CisJCXZnZGV2LT5vdXRwdXRzW2ldLmluZm8gPSByZXNw LT5wbW9kZXNbaV07CisJCWlmIChyZXNwLT5wbW9kZXNbaV0uZW5hYmxlZCkgeworCQkJRFJNX0RF QlVHKCJvdXRwdXQgJWQ6ICVkeCVkKyVkKyVkIiwgaSwKKwkJCQkgIGxlMzJfdG9fY3B1KHJlc3At PnBtb2Rlc1tpXS5yLndpZHRoKSwKKwkJCQkgIGxlMzJfdG9fY3B1KHJlc3AtPnBtb2Rlc1tpXS5y LmhlaWdodCksCisJCQkJICBsZTMyX3RvX2NwdShyZXNwLT5wbW9kZXNbaV0uci54KSwKKwkJCQkg IGxlMzJfdG9fY3B1KHJlc3AtPnBtb2Rlc1tpXS5yLnkpKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9E RUJVRygib3V0cHV0ICVkOiBkaXNhYmxlZCIsIGkpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2so JnZnZGV2LT5kaXNwbGF5X2luZm9fbG9jayk7CisJd2FrZV91cCgmdmdkZXYtPnJlc3Bfd3EpOwor CisJaWYgKCFkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQodmdkZXYtPmRkZXYpKQorCQlkcm1fa21z X2hlbHBlcl9ob3RwbHVnX2V2ZW50KHZnZGV2LT5kZGV2KTsKK30KKworaW50IHZpcnRpb19ncHVf Y21kX2dldF9kaXNwbGF5X2luZm8oc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldikKK3sK KwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciAqY21kX3A7CisJc3RydWN0IHZpcnRpb19ncHVf dmJ1ZmZlciAqdmJ1ZjsKKwl2b2lkICpyZXNwX2J1ZjsKKworCXJlc3BfYnVmID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IHZpcnRpb19ncHVfcmVzcF9kaXNwbGF5X2luZm8pLAorCQkJICAgR0ZQX0tF Uk5FTCk7CisJaWYgKCFyZXNwX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWRfcCA9IHZp cnRpb19ncHVfYWxsb2NfY21kX3Jlc3AKKwkJKHZnZGV2LCAmdmlydGlvX2dwdV9jbWRfZ2V0X2Rp c3BsYXlfaW5mb19jYiwgJnZidWYsCisJCSBzaXplb2YoKmNtZF9wKSwgc2l6ZW9mKHN0cnVjdCB2 aXJ0aW9fZ3B1X3Jlc3BfZGlzcGxheV9pbmZvKSwKKwkJIHJlc3BfYnVmKTsKKwltZW1zZXQoY21k X3AsIDAsIHNpemVvZigqY21kX3ApKTsKKworCWNtZF9wLT50eXBlID0gY3B1X3RvX2xlMzIoVklS VElPX0dQVV9DTURfR0VUX0RJU1BMQVlfSU5GTyk7CisJdmlydGlvX2dwdV9xdWV1ZV9jdHJsX2J1 ZmZlcih2Z2RldiwgdmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aXJ0aW9fZ3B1X29iamVj dF9hdHRhY2goc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgICAgc3RydWN0 IHZpcnRpb19ncHVfb2JqZWN0ICpvYmosCisJCQkgICAgIHVpbnQzMl90IHJlc291cmNlX2lkLAor CQkJICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqKmZlbmNlKQoreworCXN0cnVjdCB2aXJ0 aW9fZ3B1X21lbV9lbnRyeSAqZW50czsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBz aTsKKworCWlmICghb2JqLT5wYWdlcykgeworCQlpbnQgcmV0OworCQlyZXQgPSB2aXJ0aW9fZ3B1 X29iamVjdF9nZXRfc2dfdGFibGUodmdkZXYsIG9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCX0KKworCS8qIGdldHMgZnJlZWQgd2hlbiB0aGUgcmluZyBoYXMgY29uc3VtZWQgaXQg Ki8KKwllbnRzID0ga21hbGxvY19hcnJheShvYmotPnBhZ2VzLT5uZW50cywKKwkJCSAgICAgc2l6 ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSksCisJCQkgICAgIEdGUF9LRVJORUwpOwor CWlmICghZW50cykgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBlbnQgbGlzdFxu Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvcl9lYWNoX3NnKG9iai0+cGFnZXMtPnNn bCwgc2csIG9iai0+cGFnZXMtPm5lbnRzLCBzaSkgeworCQllbnRzW3NpXS5hZGRyID0gY3B1X3Rv X2xlNjQoc2dfcGh5cyhzZykpOworCQllbnRzW3NpXS5sZW5ndGggPSBjcHVfdG9fbGUzMihzZy0+ bGVuZ3RoKTsKKwkJZW50c1tzaV0ucGFkZGluZyA9IDA7CisJfQorCisJdmlydGlvX2dwdV9jbWRf cmVzb3VyY2VfYXR0YWNoX2JhY2tpbmcodmdkZXYsIHJlc291cmNlX2lkLAorCQkJCQkgICAgICAg ZW50cywgb2JqLT5wYWdlcy0+bmVudHMsCisJCQkJCSAgICAgICBmZW5jZSk7CisJb2JqLT5od19y ZXNfaGFuZGxlID0gcmVzb3VyY2VfaWQ7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmlydGlvX2dw dV9jdXJzb3JfcGluZyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJICAgIHN0 cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0KQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X3Zi dWZmZXIgKnZidWY7CisJc3RydWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciAqY3VyX3A7CisK KwlvdXRwdXQtPmN1cnNvci5wb3Muc2Nhbm91dF9pZCA9IGNwdV90b19sZTMyKG91dHB1dC0+aW5k ZXgpOworCWN1cl9wID0gdmlydGlvX2dwdV9hbGxvY19jdXJzb3IodmdkZXYsICZ2YnVmKTsKKwlt ZW1jcHkoY3VyX3AsICZvdXRwdXQtPmN1cnNvciwgc2l6ZW9mKG91dHB1dC0+Y3Vyc29yKSk7CisJ dmlydGlvX2dwdV9xdWV1ZV9jdXJzb3IodmdkZXYsIHZidWYpOworfQpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGU5Mjg2MjUuLmExMDY3 YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1Q LmgKQEAgLTc5OSw2ICs3OTksNyBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7CiAjZW5kaWYKIAogCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtZGV2OyAvKio8IFBsYXRmb3JtIGRldmljZSBz dHJ1dHVyZSAqLworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2aXJ0ZGV2OwogCiAJc3RydWN0IGRy bV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLwogCXVuc2lnbmVkIGlu dCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhp cyBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQgYi9pbmNs dWRlL3VhcGkvbGludXgvS2J1aWxkCmluZGV4IDY4Y2ViOTcuLjk3MDdlNWQgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWls ZApAQCAtNDI5LDYgKzQyOSw3IEBAIGhlYWRlci15ICs9IHZpcnRpb19iYWxsb29uLmgKIGhlYWRl ci15ICs9IHZpcnRpb19ibGsuaAogaGVhZGVyLXkgKz0gdmlydGlvX2NvbmZpZy5oCiBoZWFkZXIt eSArPSB2aXJ0aW9fY29uc29sZS5oCitoZWFkZXIteSArPSB2aXJ0aW9fZ3B1LmgKIGhlYWRlci15 ICs9IHZpcnRpb19pZHMuaAogaGVhZGVyLXkgKz0gdmlydGlvX25ldC5oCiBoZWFkZXIteSArPSB2 aXJ0aW9fcGNpLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fZ3B1Lmgg Yi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2dwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjU3MWM0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbGlu dXgvdmlydGlvX2dwdS5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogVmlydGlvIEdQVSBEZXZp Y2UKKyAqCisgKiBDb3B5cmlnaHQgUmVkIEhhdCwgSW5jLiAyMDEzLTIwMTQKKyAqCisgKiBBdXRo b3JzOgorICogICAgIERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKiAgICAgR2Vy ZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBoZWFkZXIgaXMgQlNE IGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucworICogdG8gaW1wbGVt ZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzOgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0 aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF UlMgQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElC TSBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq LworCisjaWZuZGVmIFZJUlRJT19HUFVfSFdfSAorI2RlZmluZSBWSVJUSU9fR1BVX0hXX0gKKwor ZW51bSB2aXJ0aW9fZ3B1X2N0cmxfdHlwZSB7CisJVklSVElPX0dQVV9VTkRFRklORUQgPSAwLAor CisJLyogMmQgY29tbWFuZHMgKi8KKwlWSVJUSU9fR1BVX0NNRF9HRVRfRElTUExBWV9JTkZPID0g MHgwMTAwLAorCVZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0NSRUFURV8yRCwKKwlWSVJUSU9fR1BV X0NNRF9SRVNPVVJDRV9VTlJFRiwKKwlWSVJUSU9fR1BVX0NNRF9TRVRfU0NBTk9VVCwKKwlWSVJU SU9fR1BVX0NNRF9SRVNPVVJDRV9GTFVTSCwKKwlWSVJUSU9fR1BVX0NNRF9UUkFOU0ZFUl9UT19I T1NUXzJELAorCVZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0FUVEFDSF9CQUNLSU5HLAorCVZJUlRJ T19HUFVfQ01EX1JFU09VUkNFX0RFVEFDSF9CQUNLSU5HLAorCisJLyogY3Vyc29yIGNvbW1hbmRz ICovCisJVklSVElPX0dQVV9DTURfVVBEQVRFX0NVUlNPUiA9IDB4MDMwMCwKKwlWSVJUSU9fR1BV X0NNRF9NT1ZFX0NVUlNPUiwKKworCS8qIHN1Y2Nlc3MgcmVzcG9uc2VzICovCisJVklSVElPX0dQ VV9SRVNQX09LX05PREFUQSA9IDB4MTEwMCwKKwlWSVJUSU9fR1BVX1JFU1BfT0tfRElTUExBWV9J TkZPLAorCisJLyogZXJyb3IgcmVzcG9uc2VzICovCisJVklSVElPX0dQVV9SRVNQX0VSUl9VTlNQ RUMgPSAweDEyMDAsCisJVklSVElPX0dQVV9SRVNQX0VSUl9PVVRfT0ZfTUVNT1JZLAorCVZJUlRJ T19HUFVfUkVTUF9FUlJfSU5WQUxJRF9TQ0FOT1VUX0lELAorCVZJUlRJT19HUFVfUkVTUF9FUlJf SU5WQUxJRF9SRVNPVVJDRV9JRCwKKwlWSVJUSU9fR1BVX1JFU1BfRVJSX0lOVkFMSURfQ09OVEVY VF9JRCwKKwlWSVJUSU9fR1BVX1JFU1BfRVJSX0lOVkFMSURfUEFSQU1FVEVSLAorfTsKKworI2Rl ZmluZSBWSVJUSU9fR1BVX0ZMQUdfRkVOQ0UgKDEgPDwgMCkKKworc3RydWN0IHZpcnRpb19ncHVf Y3RybF9oZHIgeworCV9fbGUzMiB0eXBlOworCV9fbGUzMiBmbGFnczsKKwlfX2xlNjQgZmVuY2Vf aWQ7CisJX19sZTMyIGN0eF9pZDsKKwlfX2xlMzIgcGFkZGluZzsKK307CisKKy8qIGRhdGEgcGFz c2VkIGluIHRoZSBjdXJzb3IgdnEgKi8KKworc3RydWN0IHZpcnRpb19ncHVfY3Vyc29yX3BvcyB7 CisJX19sZTMyIHNjYW5vdXRfaWQ7CisJX19sZTMyIHg7CisJX19sZTMyIHk7CisJX19sZTMyIHBh ZGRpbmc7Cit9OworCisvKiBWSVJUSU9fR1BVX0NNRF9VUERBVEVfQ1VSU09SLCBWSVJUSU9fR1BV X0NNRF9NT1ZFX0NVUlNPUiAqLworc3RydWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciB7CisJ c3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCXN0cnVjdCB2aXJ0aW9fZ3B1X2N1cnNv cl9wb3MgcG9zOyAgLyogdXBkYXRlICYgbW92ZSAqLworCV9fbGUzMiByZXNvdXJjZV9pZDsgICAg ICAgICAgIC8qIHVwZGF0ZSBvbmx5ICovCisJX19sZTMyIGhvdF94OyAgICAgICAgICAgICAgICAg LyogdXBkYXRlIG9ubHkgKi8KKwlfX2xlMzIgaG90X3k7ICAgICAgICAgICAgICAgICAvKiB1cGRh dGUgb25seSAqLworCV9fbGUzMiBwYWRkaW5nOworfTsKKworLyogZGF0YSBwYXNzZWQgaW4gdGhl IGNvbnRyb2wgdnEsIDJkIHJlbGF0ZWQgKi8KKworc3RydWN0IHZpcnRpb19ncHVfcmVjdCB7CisJ X19sZTMyIHg7CisJX19sZTMyIHk7CisJX19sZTMyIHdpZHRoOworCV9fbGUzMiBoZWlnaHQ7Cit9 OworCisvKiBWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9VTlJFRiAqLworc3RydWN0IHZpcnRpb19n cHVfcmVzb3VyY2VfdW5yZWYgeworCXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyIGhkcjsKKwlf X2xlMzIgcmVzb3VyY2VfaWQ7CisJX19sZTMyIHBhZGRpbmc7Cit9OworCisvKiBWSVJUSU9fR1BV X0NNRF9SRVNPVVJDRV9DUkVBVEVfMkQ6IGNyZWF0ZSBhIDJkIHJlc291cmNlIHdpdGggYSBmb3Jt YXQgKi8KK3N0cnVjdCB2aXJ0aW9fZ3B1X3Jlc291cmNlX2NyZWF0ZV8yZCB7CisJc3RydWN0IHZp cnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9fbGUzMiByZXNvdXJjZV9pZDsKKwlfX2xlMzIgZm9y bWF0OworCV9fbGUzMiB3aWR0aDsKKwlfX2xlMzIgaGVpZ2h0OworfTsKKworLyogVklSVElPX0dQ VV9DTURfU0VUX1NDQU5PVVQgKi8KK3N0cnVjdCB2aXJ0aW9fZ3B1X3NldF9zY2Fub3V0IHsKKwlz dHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciBoZHI7CisJc3RydWN0IHZpcnRpb19ncHVfcmVjdCBy OworCV9fbGUzMiBzY2Fub3V0X2lkOworCV9fbGUzMiByZXNvdXJjZV9pZDsKK307CisKKy8qIFZJ UlRJT19HUFVfQ01EX1JFU09VUkNFX0ZMVVNIICovCitzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJj ZV9mbHVzaCB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCXN0cnVjdCB2aXJ0 aW9fZ3B1X3JlY3QgcjsKKwlfX2xlMzIgcmVzb3VyY2VfaWQ7CisJX19sZTMyIHBhZGRpbmc7Cit9 OworCisvKiBWSVJUSU9fR1BVX0NNRF9UUkFOU0ZFUl9UT19IT1NUXzJEOiBzaW1wbGUgdHJhbnNm ZXIgdG9faG9zdCAqLworc3RydWN0IHZpcnRpb19ncHVfdHJhbnNmZXJfdG9faG9zdF8yZCB7CisJ c3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCXN0cnVjdCB2aXJ0aW9fZ3B1X3JlY3Qg cjsKKwlfX2xlNjQgb2Zmc2V0OworCV9fbGUzMiByZXNvdXJjZV9pZDsKKwlfX2xlMzIgcGFkZGlu ZzsKK307CisKK3N0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSB7CisJX19sZTY0IGFkZHI7CisJ X19sZTMyIGxlbmd0aDsKKwlfX2xlMzIgcGFkZGluZzsKK307CisKKy8qIFZJUlRJT19HUFVfQ01E X1JFU09VUkNFX0FUVEFDSF9CQUNLSU5HICovCitzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9h dHRhY2hfYmFja2luZyB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9fbGUz MiByZXNvdXJjZV9pZDsKKwlfX2xlMzIgbnJfZW50cmllczsKK307CisKKy8qIFZJUlRJT19HUFVf Q01EX1JFU09VUkNFX0RFVEFDSF9CQUNLSU5HICovCitzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJj ZV9kZXRhY2hfYmFja2luZyB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9f bGUzMiByZXNvdXJjZV9pZDsKKwlfX2xlMzIgcGFkZGluZzsKK307CisKKy8qIFZJUlRJT19HUFVf UkVTUF9PS19ESVNQTEFZX0lORk8gKi8KKyNkZWZpbmUgVklSVElPX0dQVV9NQVhfU0NBTk9VVFMg MTYKK3N0cnVjdCB2aXJ0aW9fZ3B1X3Jlc3BfZGlzcGxheV9pbmZvIHsKKwlzdHJ1Y3QgdmlydGlv X2dwdV9jdHJsX2hkciBoZHI7CisJc3RydWN0IHZpcnRpb19ncHVfZGlzcGxheV9vbmUgeworCQlz dHJ1Y3QgdmlydGlvX2dwdV9yZWN0IHI7CisJCV9fbGUzMiBlbmFibGVkOworCQlfX2xlMzIgZmxh Z3M7CisJfSBwbW9kZXNbVklSVElPX0dQVV9NQVhfU0NBTk9VVFNdOworfTsKKworI2RlZmluZSBW SVJUSU9fR1BVX0VWRU5UX0RJU1BMQVkgKDEgPDwgMCkKKworc3RydWN0IHZpcnRpb19ncHVfY29u ZmlnIHsKKwlfX3UzMiBldmVudHNfcmVhZDsKKwlfX3UzMiBldmVudHNfY2xlYXI7CisJX191MzIg bnVtX3NjYW5vdXRzOworCV9fdTMyIHJlc2VydmVkOworfTsKKworLyogc2ltcGxlIGZvcm1hdHMg Zm9yIGZiY29uL1ggdXNlICovCitlbnVtIHZpcnRpb19ncHVfZm9ybWF0cyB7CisJVklSVElPX0dQ VV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gID0gMSwKKwlWSVJUSU9fR1BVX0ZPUk1BVF9COEc4UjhY OF9VTk9STSAgPSAyLAorCVZJUlRJT19HUFVfRk9STUFUX0E4UjhHOEI4X1VOT1JNICA9IDMsCisJ VklSVElPX0dQVV9GT1JNQVRfWDhSOEc4QjhfVU5PUk0gID0gNCwKKworCVZJUlRJT19HUFVfRk9S TUFUX1I4RzhCOEE4X1VOT1JNICA9IDY3LAorCVZJUlRJT19HUFVfRk9STUFUX1g4QjhHOFI4X1VO T1JNICA9IDY4LAorCisJVklSVElPX0dQVV9GT1JNQVRfQThCOEc4UjhfVU5PUk0gID0gMTIxLAor CVZJUlRJT19HUFVfRk9STUFUX1I4RzhCOFg4X1VOT1JNICA9IDEzNCwKK307CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaCBiL2luY2x1ZGUvdWFw aS9saW51eC92aXJ0aW9faWRzLmgKaW5kZXggMjg0ZmMzYS4uODZiMjQwZTIgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3ZpcnRpb19pZHMuaApAQCAtMzksNSArMzksNiBAQAogI2RlZmluZSBWSVJUSU9fSURfOVAJCTkg LyogOXAgdmlydGlvIGNvbnNvbGUgKi8KICNkZWZpbmUgVklSVElPX0lEX1JQUk9DX1NFUklBTCAx MSAvKiB2aXJ0aW8gcmVtb3RlcHJvYyBzZXJpYWwgbGluayAqLwogI2RlZmluZSBWSVJUSU9fSURf Q0FJRgkgICAgICAgMTIgLyogVmlydGlvIGNhaWYgKi8KKyNkZWZpbmUgVklSVElPX0lEX0dQVSAg ICAgICAgICAxNgogCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19JRFNfSCAqLwotLSAKMS44LjMu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK