From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Jeffery Subject: [PATCH 02/12] pinctrl: Add core pinctrl support for Aspeed SoCs Date: Wed, 20 Jul 2016 15:28:23 +0930 Message-ID: <1468994313-13538-3-git-send-email-andrew@aj.id.au> References: <1468994313-13538-1-git-send-email-andrew@aj.id.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1468994313-13538-1-git-send-email-andrew@aj.id.au> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Linus Walleij Cc: Mark Rutland , Alexandre Courbot , devicetree@vger.kernel.org, Andrew Jeffery , Benjamin Herrenschmidt , Russell King , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Rob Herring , Joel Stanley , linux-arm-kernel@lists.infradead.org, Jeremy Kerr List-Id: linux-gpio@vger.kernel.org VGhlIEFzcGVlZCBTb0NzIHByb3ZpZGUgdHlwaWNhbGx5IG1vcmUgdGhhbiAyMDAgcGlucyBmb3Ig R1BJTyBhbmQgb3RoZXIKZnVuY3Rpb25zLiBUaGUgc2lnbmFsIGVuYWJsZWQgb24gYSBwaW4gaXMg ZGV0ZXJtaW5lZCBvbiBhIHByaW9yaXR5CmJhc2lzLCB3aGVyZSBhIGdpdmVuIHBpbiBjYW4gcHJv dmlkZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgc2lnbmFsIHR5cGVzLgoKSW4gYWRkaXRpb24gdG8g dGhlIHByaW9yaXR5IGxldmVscywgdGhlIEFzcGVlZCBwaW4gY29udHJvbGxlcnMgZGVzY3JpYmUK dGhlIHNpZ25hbCBhY3RpdmUgb24gYSBwaW4gYnkgY29tcG91bmQgbG9naWNhbCBleHByZXNzaW9u cyBpbnZvbHZpbmcKbXVsdGlwbGUgb3BlcmF0b3JzLCByZWdpc3RlcnMgYW5kIGJpdHMuIFNvbWUg ZGlmZmljdWx0eSBhcmlzZXMgYXMgYQpwaW4ncyBmdW5jdGlvbiBiaXQgbWFza3MgZm9yIGVhY2gg cHJpb3JpdHkgbGV2ZWwgYXJlIGZyZXF1ZW50bHkgbm90IHRoZQpzYW1lIChpLmUuIHdlIGNhbm5v dCBqdXN0IGZsaXAgYSBiaXQgdG8gY2hhbmdlIGZyb20gYSBoaWdoIHRvIGxvdwpwcmlvcml0eSBz aWduYWwpLCBvciBldmVuIGluIHRoZSBzYW1lIHJlZ2lzdGVyKHMpLiBTb21lIGNvbmZpZ3VyYXRp b24KYml0cyBhZmZlY3QgbXVsdGlwbGUgcGlucywgd2hpbGUgaW4gb3RoZXIgY2FzZXMgdGhlIHNp Z25hbHMgZm9yIGEgYnVzCm11c3QgZWFjaCBiZSBlbmFibGVkIGluZGl2aWR1YWxseS4KClRvZ2V0 aGVyLCB0aGVzZSBmZWF0dXJlcyBnaXZlIHJpc2UgdG8gc29tZSBjb21wbGV4aXR5IGluIHRoZQpp bXBsZW1lbnRhdGlvbi4gQSBtb3JlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wbGV4 aXRpZXMgaXMKcHJvdmlkZWQgaW4gdGhlIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGUgaW4gYW4gYXR0 ZW1wdCB0byBqdXN0aWZ5IHRoZQphcHByb2FjaC4KCk5vdGUgdGhhdCB0aGUgcGF0Y2ggZG9lc24n dCBpbXBsZW1lbnQgcGluY3RybC9waW5tdXgvcGluY29uZiBmb3IgYW55CnBhcnRpY3VsYXIgU29D LCBqdXN0IGFkZHMgdGhlIGZyYW1ld29yayBmb3IgZGVmaW5pbmcgbXV4IGNvbmZpZ3VyYXRpb25z CmZvciBhbnkgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBKZWZm ZXJ5IDxhbmRyZXdAYWouaWQuYXU+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGFyY2gvYXJtL21hY2gtYXNwZWVkL0tjb25maWcgICAgICAgICAg ICB8ICAgMSArCiBkcml2ZXJzL3BpbmN0cmwvS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDEg KwogZHJpdmVycy9waW5jdHJsL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZl cnMvcGluY3RybC9hc3BlZWQvS2NvbmZpZyAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL3BpbmN0 cmwvYXNwZWVkL01ha2VmaWxlICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9waW5jdHJsL2FzcGVl ZC9waW5jdHJsLWFzcGVlZC5jIHwgMzczICsrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9w aW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5oIHwgNTYyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDk1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9waW5jdHJsL2FzcGVlZC9LY29uZmlnCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9waW5jdHJsL2FzcGVlZC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuaAoKZGlmZiAtLWdpdCBh L01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjVmMmQzNTc2ZDNhLi5mNjk4N2RlMzU0 MzUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xMDA0LDYg KzEwMDQsNyBAQCBGOglhcmNoL2FybS9tYWNoLWFzcGVlZC8KIEY6CWFyY2gvYXJtL2Jvb3QvZHRz L2FzcGVlZC0qCiBGOglkcml2ZXJzLyovKmFzcGVlZCoKIEY6CURvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy8qLyphc3BlZWQqCitGOglkcml2ZXJzL3BpbmN0cmwvYXNwZWVkLwogCiBB Uk0vQVRNRUwgQVQ5MVJNOTIwMCwgQVQ5MVNBTTkgQU5EIFNBTUE1IFNPQyBTVVBQT1JUCiBNOglO aWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQGF0bWVsLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gv YXJtL21hY2gtYXNwZWVkL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWFzcGVlZC9LY29uZmlnCmlu ZGV4IDUyMjVmYmNiMjUwZC4uNjMyODk5YzU4MDk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNo LWFzcGVlZC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXNwZWVkL0tjb25maWcKQEAgLTUs NiArNSw3IEBAIG1lbnVjb25maWcgQVJDSF9BU1BFRUQKIAlzZWxlY3QgV0FUQ0hET0cKIAlzZWxl Y3QgQVNQRUVEX1dBVENIRE9HCiAJc2VsZWN0IE1PWEFSVF9USU1FUgorCXNlbGVjdCBQSU5DVFJM CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24g YW4gQVNwZWVkIEJNQyBTb0MuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9LY29uZmln IGIvZHJpdmVycy9waW5jdHJsL0tjb25maWcKaW5kZXggZmI4MjAwYjhlOGVjLi4yOTllNDUzMWY2 NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGlu Y3RybC9LY29uZmlnCkBAIC0yMzIsNiArMjMyLDcgQEAgY29uZmlnIFBJTkNUUkxfWllOUQogCWhl bHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgcGluY3RybCBkcml2ZXIgZm9yIFhpbGlueCBaeW5xLgog Citzb3VyY2UgImRyaXZlcnMvcGluY3RybC9hc3BlZWQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVy cy9waW5jdHJsL2JjbS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3BpbmN0cmwvYmVybGluL0tj b25maWciCiBzb3VyY2UgImRyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvS2NvbmZpZyIKZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9NYWtlZmls ZQppbmRleCA0MmE1YzFkZGRmZWYuLjE2MWViNWQxZDg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9w aW5jdHJsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZQpAQCAtMzQsNiAr MzQsNyBAQCBvYmotJChDT05GSUdfUElOQ1RSTF9MUEMxOFhYKQkrPSBwaW5jdHJsLWxwYzE4eHgu bwogb2JqLSQoQ09ORklHX1BJTkNUUkxfVEIxMFgpCSs9IHBpbmN0cmwtdGIxMHgubwogb2JqLSQo Q09ORklHX1BJTkNUUkxfU1QpIAkrPSBwaW5jdHJsLXN0Lm8KIG9iai0kKENPTkZJR19QSU5DVFJM X1pZTlEpCSs9IHBpbmN0cmwtenlucS5vCitvYmotJChDT05GSUdfQVJDSF9BU1BFRUQpCSs9IGFz cGVlZC8KIAogb2JqLSQoQ09ORklHX0FSQ0hfQkNNKQkJKz0gYmNtLwogb2JqLSQoQ09ORklHX1BJ TkNUUkxfQkVSTElOKQkrPSBiZXJsaW4vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYXNw ZWVkL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL0tjb25maWcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNGQ5MDUwZjI3NjEKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL0tjb25maWcKQEAgLTAsMCArMSw4IEBACitjb25m aWcgUElOQ1RSTF9BU1BFRUQKKwlib29sCisJZGVwZW5kcyBvbiAoQVJDSF9BU1BFRUQgfHwgQ09N UElMRV9URVNUKSAmJiBPRgorCXNlbGVjdCBQSU5NVVgKKwlzZWxlY3QgUElOQ09ORgorCXNlbGVj dCBHRU5FUklDX1BJTkNPTkYKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBSRUdNQVBfTU1J TwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9NYWtlZmlsZSBiL2RyaXZlcnMv cGluY3RybC9hc3BlZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi42YmMwMDFjMDAxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwv YXNwZWVkL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBBc3BlZWQgcGluY3RybCBzdXBwb3J0 CisKK29iai0kKENPTkZJR19QSU5DVFJMX0FTUEVFRCkJKz0gcGluY3RybC1hc3BlZWQubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jIGIvZHJpdmVy cy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMDdkMDllMDRhNmVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jCkBAIC0wLDAgKzEsMzczIEBACisvKgor ICogQ29weXJpZ2h0IChDKSAyMDE2IElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWZk L3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgIi4uL2NvcmUuaCIKKyNpbmNsdWRlICJwaW5jdHJs LWFzcGVlZC5oIgorCitpbnQgYXNwZWVkX3BpbmN0cmxfZ2V0X2dyb3Vwc19jb3VudChzdHJ1Y3Qg cGluY3RybF9kZXYgKnBjdGxkZXYpCit7CisJc3RydWN0IGFzcGVlZF9waW5jdHJsX2RhdGEgKnBk YXRhID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisKKwlyZXR1cm4gcGRhdGEt Pm5ncm91cHM7Cit9CisKK2NvbnN0IGNoYXIgKmFzcGVlZF9waW5jdHJsX2dldF9ncm91cF9uYW1l KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJdW5zaWduZWQgaW50IGdyb3VwKQorewor CXN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhICpwZGF0YSA9IHBpbmN0cmxfZGV2X2dldF9kcnZk YXRhKHBjdGxkZXYpOworCisJcmV0dXJuIHBkYXRhLT5ncm91cHNbZ3JvdXBdLm5hbWU7Cit9CisK K2ludCBhc3BlZWRfcGluY3RybF9nZXRfZ3JvdXBfcGlucyhzdHJ1Y3QgcGluY3RybF9kZXYgKnBj dGxkZXYsCisJCXVuc2lnbmVkIGludCBncm91cCwgY29uc3QgdW5zaWduZWQgaW50ICoqcGlucywK KwkJdW5zaWduZWQgaW50ICpucGlucykKK3sKKwlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAq cGRhdGEgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKKworCSpwaW5zID0gJnBk YXRhLT5ncm91cHNbZ3JvdXBdLnBpbnNbMF07CisJKm5waW5zID0gcGRhdGEtPmdyb3Vwc1tncm91 cF0ubnBpbnM7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhc3BlZWRfcGluY3RybF9waW5fZGJn X3Nob3coc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc2VxX3ByaW50ZihzLCAiICVzIiwgZGV2X25hbWUo cGN0bGRldi0+ZGV2KSk7Cit9CisKK2ludCBhc3BlZWRfcGlubXV4X2dldF9mbl9jb3VudChzdHJ1 Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYpCit7CisJc3RydWN0IGFzcGVlZF9waW5jdHJsX2RhdGEg KnBkYXRhID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisKKwlyZXR1cm4gcGRh dGEtPm5mdW5jdGlvbnM7Cit9CisKK2NvbnN0IGNoYXIgKmFzcGVlZF9waW5tdXhfZ2V0X2ZuX25h bWUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJCQkJdW5zaWduZWQgaW50IGZ1bmN0 aW9uKQoreworCXN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhICpwZGF0YSA9IHBpbmN0cmxfZGV2 X2dldF9kcnZkYXRhKHBjdGxkZXYpOworCisJcmV0dXJuIHBkYXRhLT5mdW5jdGlvbnNbZnVuY3Rp b25dLm5hbWU7Cit9CisKK2ludCBhc3BlZWRfcGlubXV4X2dldF9mbl9ncm91cHMoc3RydWN0IHBp bmN0cmxfZGV2ICpwY3RsZGV2LAorCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNvbnN0IGNoYXIg KiBjb25zdCAqKmdyb3VwcywKKwkJdW5zaWduZWQgaW50ICogY29uc3QgbnVtX2dyb3VwcykKK3sK KwlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAqcGRhdGEgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2 ZGF0YShwY3RsZGV2KTsKKworCSpncm91cHMgPSBwZGF0YS0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5n cm91cHM7CisJKm51bV9ncm91cHMgPSBwZGF0YS0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5uZ3JvdXBz OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3BlZWRfc2lnX2Rlc2Nf cHJpbnRfdmFsKAorCQljb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNjLCBib29sIGVu YWJsZSwgdTMyIHJ2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1BJTkNUUkwpCisJcHJf ZGVidWcoIlNDVSV4WzB4JTA4eF09MHgleCwgZ290IDB4JXggZnJvbSAweCUwOHhcbiIsIGRlc2Mt PnJlZywKKwkJCWRlc2MtPm1hc2ssIGVuYWJsZSA/IGRlc2MtPmVuYWJsZSA6IGRlc2MtPmRpc2Fi bGUsCisJCQkocnYgJiBkZXNjLT5tYXNrKSA+PiBfX2ZmcyhkZXNjLT5tYXNrKSwgcnYpOworI2Vu ZGlmCit9CisKK3N0YXRpYyBib29sIGFzcGVlZF9zaWdfZGVzY19ldmFsKGNvbnN0IHN0cnVjdCBh c3BlZWRfc2lnX2Rlc2MgKmRlc2MsCisJCWJvb2wgZW5hYmxlZCwgc3RydWN0IHJlZ21hcCAqbWFw KQoreworCXVuc2lnbmVkIGludCByYXc7CisJdTMyIHdhbnQ7CisKKwlpZiAocmVnbWFwX3JlYWQo bWFwLCBkZXNjLT5yZWcsICZyYXcpIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJYXNwZWVkX3Np Z19kZXNjX3ByaW50X3ZhbChkZXNjLCBlbmFibGVkLCByYXcpOworCXdhbnQgPSBlbmFibGVkID8g ZGVzYy0+ZW5hYmxlIDogZGVzYy0+ZGlzYWJsZTsKKworCXJldHVybiAoKHJhdyAmIGRlc2MtPm1h c2spID4+IF9fZmZzKGRlc2MtPm1hc2spKSA9PSB3YW50OworfQorCitzdGF0aWMgYm9vbCBhc3Bl ZWRfc2lnX2V4cHJfZXZhbChjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICpleHByLAorCQli b29sIGVuYWJsZWQsIHN0cnVjdCByZWdtYXAgKm1hcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBleHByLT5uZGVzY3M7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19k ZXNjICpkZXNjID0gJmV4cHItPmRlc2NzW2ldOworCisJCWlmICghYXNwZWVkX3NpZ19kZXNjX2V2 YWwoZGVzYywgZW5hYmxlZCwgbWFwKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoqCisgKiBDb25maWd1cmUgYSBzaWduYWwgc3RhdGUgYnkgYXBwbHlpbmcg ZGVzY3JpcHRvciBzdGF0ZSBmb3IgYWxsIGRlc2NyaXB0b3JzIGluCisgKiBhIHNpZ25hbCBleHBy ZXNzaW9uLgorICoKKyAqIEBleHByOiBUaGUgZXhwcmVzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhl IGZ1bmN0aW9uIHdob3NlIHNpZ25hbCBpcyB0byBiZQorICogICAgICAgIGNvbmZpZ3VyZWQKKyAq IEBlbmFibGU6IHRydWUgdG8gZW5hYmxlIGFuIGZ1bmN0aW9uJ3Mgc2lnbmFsIHRocm91Z2ggYSBw aW4ncyBzaWduYWwKKyAqICAgICAgICAgIGV4cHJlc3Npb24sIGZhbHNlIHRvIGRpc2FibGUgdGhl IGZ1bmN0aW9uJ3Mgc2lnbmFsCisgKiBAbWFwOiBUaGUgU0NVJ3MgcmVnbWFwIGluc3RhbmNlIGZv ciBwaW5tdXggcmVnaXN0ZXIgYWNjZXNzLgorICoKKyAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXhw cmVzc2lvbiBpcyBjb25maWd1cmVkIGFzIHJlcXVlc3RlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8K K3N0YXRpYyBib29sIGFzcGVlZF9zaWdfZXhwcl9zZXQoY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdf ZXhwciAqZXhwciwKKwkJYm9vbCBlbmFibGUsIHN0cnVjdCByZWdtYXAgKm1hcCkKK3sKKwlpbnQg aTsKKwlib29sIHJldDsKKworCXJldCA9IGFzcGVlZF9zaWdfZXhwcl9ldmFsKGV4cHIsIGVuYWJs ZSwgbWFwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGV4 cHItPm5kZXNjczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2Rlc2MgKmRlc2Mg PSAmZXhwci0+ZGVzY3NbaV07CisJCXUzMiBwYXR0ZXJuID0gZW5hYmxlID8gZGVzYy0+ZW5hYmxl IDogZGVzYy0+ZGlzYWJsZTsKKwkJdW5zaWduZWQgaW50IHZhbDsKKworCQkvKgorCQkgKiBTdHJh cCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQgaW4gaGFyZHdhcmUgb3IgYnkgZWFybHktYm9vdAor CQkgKiBmaXJtd2FyZS4gVHJlYXQgdGhlbSBhcyByZWFkLW9ubHkgZGVzcGl0ZSB0aGF0IHdlIGNh biB3cml0ZQorCQkgKiB0aGVtLiBUaGlzIG1heSBtZWFuIHRoYXQgY2VydGFpbiBmdW5jdGlvbnMg Y2Fubm90IGJlCisJCSAqIGRlY29uZmlndXJlZCBhbmQgaXMgdGhlIHJlYXNvbiB3ZSByZS1ldmFs dWF0ZSBhZnRlciB3cml0aW5nCisJCSAqIGFsbCBkZXNjcmlwdG9yIGJpdHMuCisJCSAqLworCQlp ZiAoZGVzYy0+cmVnID09IEhXX1NUUkFQMSB8fCBkZXNjLT5yZWcgPT0gSFdfU1RSQVAyKQorCQkJ Y29udGludWU7CisKKwkJaWYgKHJlZ21hcF9yZWFkKG1hcCwgZGVzYy0+cmVnLCAmdmFsKSA8IDAp CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJdmFsICY9IH5kZXNjLT5tYXNrOworCQl2YWwgfD0gcGF0 dGVybiA8PCBfX2ZmcyhkZXNjLT5tYXNrKTsKKworCQlpZiAocmVnbWFwX3dyaXRlKG1hcCwgZGVz Yy0+cmVnLCB2YWwpIDwgMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gYXNwZWVk X3NpZ19leHByX2V2YWwoZXhwciwgZW5hYmxlLCBtYXApOworfQorCitzdGF0aWMgYm9vbCBhc3Bl ZWRfc2lnX2V4cHJfZW5hYmxlKGNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKmV4cHIsCisJ CXN0cnVjdCByZWdtYXAgKm1hcCkKK3sKKwlyZXR1cm4gYXNwZWVkX3NpZ19leHByX3NldChleHBy LCB0cnVlLCBtYXApOworfQorCitzdGF0aWMgYm9vbCBhc3BlZWRfc2lnX2V4cHJfZGlzYWJsZShj b25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICpleHByLAorCQlzdHJ1Y3QgcmVnbWFwICptYXAp Cit7CisJcmV0dXJuIGFzcGVlZF9zaWdfZXhwcl9zZXQoZXhwciwgZmFsc2UsIG1hcCk7Cit9CisK Ky8qKgorICogRGlzYWJsZSBhIHNpZ25hbCBvbiBhIHBpbiBieSBkaXNhYmxpbmcgYWxsIHByb3Zp ZGVkIHNpZ25hbCBleHByZXNzaW9ucy4KKyAqCisgKiBAZXhwcnM6IFRoZSBsaXN0IG9mIHNpZ25h bCBleHByZXNzaW9ucyAoZnJvbSBhIHByaW9yaXR5IGxldmVsIG9uIGEgcGluKQorICogQG1hcDog VGhlIFNDVSdzIHJlZ21hcCBpbnN0YW5jZSBmb3IgcGlubXV4IHJlZ2lzdGVyIGFjY2Vzcy4KKyAq CisgKiBAcmV0dXJuIHRydWUgaWYgYWxsIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0IGFyZSBzdWNj ZXNzZnVsbHkgZGlzYWJsZWQsIGZhbHNlCisgKiBvdGhlcndpc2UKKyAqLworc3RhdGljIGJvb2wg YXNwZWVkX2Rpc2FibGVfc2lnKGNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKipleHBycywK KwkJc3RydWN0IHJlZ21hcCAqbWFwKQoreworCWJvb2wgZGlzYWJsZWQgPSB0cnVlOworCisJaWYg KCFleHBycykKKwkJcmV0dXJuIHRydWU7CisKKwl3aGlsZSAoKmV4cHJzKSB7CisJCWJvb2wgcmV0 OworCisJCXJldCA9IGFzcGVlZF9zaWdfZXhwcl9kaXNhYmxlKCpleHBycywgbWFwKTsKKwkJZGlz YWJsZWQgPSBkaXNhYmxlZCAmJiByZXQ7CisKKwkJZXhwcnMrKzsKKwl9CisKKwlyZXR1cm4gZGlz YWJsZWQ7Cit9CisKKy8qKgorICogU2VhcmNoIGZvciB0aGUgc2lnbmFsIGV4cHJlc3Npb24gbmVl ZGVkIHRvIGVuYWJsZSB0aGUgcGluJ3Mgc2lnbmFsIGZvciB0aGUKKyAqIHJlcXVlc3RlZCBmdW5j dGlvbi4KKyAqCisgKiBAZXhwcnM6IExpc3Qgb2Ygc2lnbmFsIGV4cHJlc3Npb25zIChoYXlzdGFj aykKKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uIChuZWVkbGUp CisgKgorICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIHNpZ25hbCBleHByZXNzaW9uIHdob3Nl IGZ1bmN0aW9uIHRhZyBtYXRjaGVzIHRoZQorICogICAgICAgICBwcm92aWRlZCBuYW1lLCBvdGhl cndpc2UgTlVMTC4KKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHBy ICphc3BlZWRfZmluZF9leHByX2J5X25hbWUoCisJCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4 cHIgKipleHBycywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl3aGlsZSAoKmV4cHJzKSB7CisJCWlm IChzdHJjbXAoKCpleHBycyktPmZ1bmN0aW9uLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuICpleHBy czsKKwkJZXhwcnMrKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGFzcGVlZF9waW5t dXhfc2V0X211eChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVkIGludCBmdW5j dGlvbiwKKwkJdW5zaWduZWQgaW50IGdyb3VwKQoreworCWludCBpOworCWNvbnN0IHN0cnVjdCBh c3BlZWRfcGluY3RybF9kYXRhICpwZGF0YSA9CisJCXBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBj dGxkZXYpOworCWNvbnN0IHN0cnVjdCBhc3BlZWRfcGluX2dyb3VwICpwZ3JvdXAgPSAmcGRhdGEt Pmdyb3Vwc1tncm91cF07CisJY29uc3Qgc3RydWN0IGFzcGVlZF9waW5fZnVuY3Rpb24gKnBmdW5j ID0KKwkJJnBkYXRhLT5mdW5jdGlvbnNbZnVuY3Rpb25dOworCisJZm9yIChpID0gMDsgaSA8IHBn cm91cC0+bnBpbnM7IGkrKykgeworCQlpbnQgcGluID0gcGdyb3VwLT5waW5zW2ldOworCQljb25z dCBzdHJ1Y3QgYXNwZWVkX3Bpbl9kZXNjICpwZGVzYyA9IHBkYXRhLT5waW5zW3Bpbl0uZHJ2X2Rh dGE7CisJCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKmV4cHIgPSBOVUxMOworCQljb25z dCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICoqZnVuY3M7CisJCWNvbnN0IHN0cnVjdCBhc3BlZWRf c2lnX2V4cHIgKioqcHJpb3M7CisKKwkJaWYgKCFwZGVzYykKKwkJCXJldHVybiAtRUlOVkFMOwor CisJCXByaW9zID0gcGRlc2MtPnByaW9zOworCisJCWlmICghcHJpb3MpCisJCQljb250aW51ZTsK KworCQkvKiBEaXNhYmxlIGZ1bmN0aW9ucyBhdCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoYXQg cmVxdWVzdGVkICovCisJCXdoaWxlICgoZnVuY3MgPSAqcHJpb3MpKSB7CisJCQlleHByID0gYXNw ZWVkX2ZpbmRfZXhwcl9ieV9uYW1lKGZ1bmNzLCBwZnVuYy0+bmFtZSk7CisKKwkJCWlmIChleHBy KQorCQkJCWJyZWFrOworCisJCQlpZiAoIWFzcGVlZF9kaXNhYmxlX3NpZyhmdW5jcywgcGRhdGEt Pm1hcCkpCisJCQkJcmV0dXJuIC1FUEVSTTsKKworCQkJcHJpb3MrKzsKKwkJfQorCisJCWlmICgh ZXhwcikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghYXNwZWVkX3NpZ19leHByX2VuYWJs ZShleHByLCBwZGF0YS0+bWFwKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBib29sIGFzcGVlZF9ncGlvX2luX2V4cHJzKGNvbnN0IHN0cnVjdCBhc3Bl ZWRfc2lnX2V4cHIgKipleHBycykKK3sKKwlpZiAoIWV4cHJzKQorCQlyZXR1cm4gZmFsc2U7CisK Kwl3aGlsZSAoKmV4cHJzKSB7CisJCWlmIChzdHJuY21wKCgqZXhwcnMpLT5zaWduYWwsICJHUElP IiwgNCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlleHBycysrOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKworaW50IGFzcGVlZF9ncGlvX3JlcXVlc3RfZW5hYmxlKHN0cnVjdCBwaW5jdHJs X2RldiAqcGN0bGRldiwKKwkJc3RydWN0IHBpbmN0cmxfZ3Bpb19yYW5nZSAqcmFuZ2UsCisJCXVu c2lnbmVkIGludCBvZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9waW5jdHJsX2RhdGEg KnBkYXRhID0KKwkJcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisJY29uc3Qgc3Ry dWN0IGFzcGVlZF9waW5fZGVzYyAqcGRlc2MgPSBwZGF0YS0+cGluc1tvZmZzZXRdLmRydl9kYXRh OworCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKioqcHJpb3MsICoqZnVuY3MsICpleHBy OworCisJaWYgKCFwZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmlvcyA9IHBkZXNjLT5w cmlvczsKKworCWlmICghcHJpb3MpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBEaXNhYmxlIGFu eSBmdW5jdGlvbnMgb2YgaGlnaGVyIHByaW9yaXR5IHRoYW4gR1BJTyAqLworCXdoaWxlICgoZnVu Y3MgPSAqcHJpb3MpKSB7CisJCWlmIChhc3BlZWRfZ3Bpb19pbl9leHBycyhmdW5jcykpCisJCQli cmVhazsKKworCQlpZiAoIWFzcGVlZF9kaXNhYmxlX3NpZyhmdW5jcywgcGRhdGEtPm1hcCkpCisJ CQlyZXR1cm4gLUVQRVJNOworCisJCXByaW9zKys7CisJfQorCisJLyogTm8gR1BJTyBvcHRpb24/ ICovCisJaWYgKCFmdW5jcykKKwkJcmV0dXJuIC1FTlhJTzsKKworCWV4cHIgPSAqZnVuY3M7CisK KwkvKgorCSAqIElmIEdQSU8gaXMgdGhlICJPdGhlciIgY2FzZSwgdGhlbiBkaXNhYmxpbmcgYWxs IHNpZ25hbCBleHByZXNzaW9ucworCSAqIGlzIGFsbCB0aGF0J3MgcmVxdWlyZWQuIEFzIHN1Y2gg aXQgaGFzIG5vIGFzc29jaWF0ZWQgZXhwcmVzc2lvbi4KKwkgKi8KKwlpZiAoIWV4cHIpCisJCXJl dHVybiAwOworCisJLyoKKwkgKiBPdGhlcndpc2UsIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9uZSBl eHByZXNzaW9uIGRlZmluZWQgdG8gZW5hYmxlCisJICogdGhlIEdQSU8gZnVuY3Rpb24KKwkgKi8K KwlpZiAoIWFzcGVlZF9zaWdfZXhwcl9lbmFibGUoZXhwciwgcGRhdGEtPm1hcCkpCisJCXJldHVy biAtRVBFUk07CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFzcGVlZF9waW5jdHJsX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBwaW5jdHJsX2Rlc2MgKnBkZXNj LAorCQlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGRldmlj ZSAqcGFyZW50OworCXN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bDsKKworCXBhcmVudCA9IHBkZXYt PmRldi5wYXJlbnQ7CisJaWYgKCFwYXJlbnQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8g cGFyZW50IGZvciBzeXNjb24gcGluY29udHJvbGxlclxuIik7CisJCXJldHVybiAtRU5PREVWOwor CX0KKworCXBkYXRhLT5tYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAocGFyZW50LT5vZl9ub2Rl KTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5tYXApKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5v IHJlZ21hcCBmb3Igc3lzY29uIHBpbmNvbnRyb2xsZXIgcGFyZW50XG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIocGRhdGEtPm1hcCk7CisJfQorCisJcGN0bCA9IHBpbmN0cmxfcmVnaXN0ZXIocGRlc2Ms ICZwZGV2LT5kZXYsIHBkYXRhKTsKKworCWlmIChJU19FUlIocGN0bCkpIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHBpbmN0cmxcbiIpOworCQlyZXR1cm4gUFRS X0VSUihwY3RsKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CisK KwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3Ry bC1hc3BlZWQuaCBiL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFhZGIwNjhhNThjZQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuaApAQCAt MCwwICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJQk0gQ29ycC4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgUElOQ1RSTF9BU1BFRUQK KyNkZWZpbmUgUElOQ1RSTF9BU1BFRUQKKworI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3Ry bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGlubXV4Lmg+CisjaW5jbHVkZSA8bGludXgv cGluY3RybC9waW5jb25mLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jb25mLWdlbmVy aWMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworLyoKKyAqIFRoZSBBU1BFRUQgQVNU IFNvQ3MgcHJvdmlkZSB0eXBpY2FsbHkgbW9yZSB0aGFuIDIwMCBwaW5zIGZvciBHUElPIGFuZCBv dGhlcgorICogZnVuY3Rpb25zLiBUaGUgU29DIGZ1bmN0aW9uIGVuYWJsZWQgb24gYSBwaW4gaXMg ZGV0ZXJtaW5lZCBvbiBhIHByaW9yaXR5CisgKiBiYXNpcyB3aGVyZSBhIGdpdmVuIHBpbiBjYW4g cHJvdmlkZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgc2lnbmFsIHR5cGVzLgorICoKKyAqIFRoZSBz aWduYWwgYWN0aXZlIG9uIGEgcGluIGlzIGRlc2NyaWJlZCBieSBib3RoIGEgcHJpb3JpdHkgbGV2 ZWwgYW5kCisgKiBjb21wb3VuZCBsb2dpY2FsIGV4cHJlc3Npb25zIGludm9sdmluZyBtdWx0aXBs ZSBvcGVyYXRvcnMsIHJlZ2lzdGVycyBhbmQKKyAqIGJpdHMuIFNvbWUgZGlmZmljdWx0eSBhcmlz ZXMgYXMgdGhlIHBpbidzIGZ1bmN0aW9uIGJpdCBtYXNrcyBmb3IgZWFjaAorICogcHJpb3JpdHkg bGV2ZWwgYXJlIGZyZXF1ZW50bHkgbm90IHRoZSBzYW1lIChpLmUuIGNhbm5vdCBqdXN0IGZsaXAg YSBiaXQgdG8KKyAqIGNoYW5nZSBmcm9tIGEgaGlnaCB0byBsb3cgcHJpb3JpdHkgc2lnbmFsKSwg b3IgZXZlbiBpbiB0aGUgc2FtZSByZWdpc3Rlci4KKyAqIEZ1cnRoZXIsIG5vdCBhbGwgc2lnbmFs cyBjYW4gYmUgdW5tdXhlZCwgYXMgc29tZSBleHByZXNzaW9ucyBkZXBlbmQgb24KKyAqIHZhbHVl cyBpbiB0aGUgaGFyZHdhcmUgc3RyYXBwaW5nIHJlZ2lzdGVyICh3aGljaCBpcyB0cmVhdGVkIGFz IHJlYWQtb25seSkuCisgKgorICogU29DIE11bHRpLWZ1bmN0aW9uIFBpbiBFeHByZXNzaW9uIEV4 YW1wbGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBIZXJlIGFyZSBzb21lIHNhbXBsZSBtdXggY29uZmlndXJhdGlvbnMgZnJvbSB0aGUgQVNU MjQwMCBhbmQgQVNUMjUwMAorICogZGF0YXNoZWV0cyB0byBpbGx1c3RyYXRlIHRoZSBjb3JuZXIg Y2FzZXMsIHJvdWdobHkgaW4gb3JkZXIgb2YgbGVhc3QgdG8gbW9zdAorICogY29ybmVyLiBUaGUg c2lnbmFsIHByaW9yaXRpZXMgYXJlIGluIGRlY2VuZGluZyBvcmRlciBmcm9tIFAwIChoaWdoZXN0 KS4KKyAqCisgKiBENiBpcyBhIHBpbiB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIChiZXNpZGUgR1BJ Tyk7IGEgaGlnaCBwcmlvcml0eSBzaWduYWwKKyAqIHRoYXQgcGFydGljaXBhdGVzIGluIG9uZSBm dW5jdGlvbjoKKyAqCisgKiBCYWxsIHwgRGVmYXVsdCB8IFAwIFNpZ25hbCB8IFAwIEV4cHJlc3Np b24gICAgICAgICAgICAgICB8IFAxIFNpZ25hbCB8IFAxIEV4cHJlc3Npb24gfCBPdGhlcgorICog LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKiAgRDYgICAgR1BJT0Ew ICAgIE1BQzFMSU5LICAgIFNDVTgwWzBdPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHUElPQTAKKyAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorICoKKyAqIEM1IGlzIGEgbXVsdGktc2lnbmFsIHBpbiAoaGlnaCBhbmQgbG93 IHByaW9yaXR5IHNpZ25hbHMpLiBIZXJlIHdlIHRvdWNoCisgKiBkaWZmZXJlbnQgcmVnaXN0ZXJz IGZvciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyB0aGF0IGVuYWJsZSBlYWNoIHNpZ25hbDoKKyAq CisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAqICBDNSAgICBH UElPQTQgICAgU0NMOSAgICAgICAgU0NVOTBbMjJdPTEgICAgICAgICAgICAgICAgICAgVElNRVI1 ICAgICAgU0NVODBbNF09MSAgICAgIEdQSU9BNAorICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgKgorICogRTE5IGlzIGEgc2luZ2xlLXNpZ25hbCBwaW4gd2l0aCB0 d28gZnVuY3Rpb25zIHRoYXQgaW5mbHVlbmNlIHRoZSBhY3RpdmUKKyAqIHNpZ25hbC4gSW4gdGhp cyBjYXNlIGJvdGggYml0cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgLSBlbmFibGUgYSBkZWRpY2F0 ZWQKKyAqIExQQyByZXNldCBwaW4uIEhvd2V2ZXIgaXQncyBub3QgYWx3YXlzIHRoZSBjYXNlIHRo YXQgdGhlIGJpdHMgaW4gdGhlCisgKiBPUi1yZWxhdGlvbnNoaXAgaGF2ZSB0aGUgc2FtZSBtZWFu aW5nLgorICoKKyAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICog IEUxOSAgIEdQSU9CNCAgICBMUENSU1QjICAgICBTQ1U4MFsxMl09MSB8IFN0cmFwWzE0XT0xICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0I0CisgKiAtLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAqCisgKiBGb3IgZXhhbXBsZSwgcGluIEIxOSBoYXMg YSBsb3ctcHJpb3JpdHkgc2lnbmFsIHRoYXQncyBlbmFibGVkIGJ5IHR3bworICogZGlzdGluY3Qg U29DIGZ1bmN0aW9uczogQSBzcGVjaWZpYyBTSU9QQkkgYml0IGluIHJlZ2lzdGVyIFNDVUE0LCBh bmQgYW4gQUNQSQorICogYml0IGluIHRoZSBTVFJBUCByZWdpc3Rlci4gVGhlIEFDUEkgYml0IGNv bmZpZ3VyZXMgc2lnbmFscyBvbiBwaW5zIGluCisgKiBhZGRpdGlvbiB0byBCMTkuIEJvdGggb2Yg dGhlIGxvdyBwcmlvcml0eSBmdW5jdGlvbnMgYXMgd2VsbCBhcyB0aGUgaGlnaAorICogcHJpb3Jp dHkgZnVuY3Rpb24gbXVzdCBiZSBkaXNhYmxlZCBmb3IgR1BJT0YxIHRvIGJlIHVzZWQuCisgKgor ICogQmFsbCB8IERlZmF1bHQgfCBQMCBTaWduYWwgfCBQMCBFeHByZXNzaW9uICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCBQMSBTaWduYWwgfCBQMSBFeHByZXNzaW9uICAgICAgICAgICAgICAg ICAgICAgICAgICB8IE90aGVyCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKiAgQjE5ICAgR1BJ T0YxICAgIE5EQ0Q0ICAgICAgIFNDVTgwWzI1XT0xICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNJT1BCSSMgICAgIFNDVUE0WzEyXT0xIHwgU3RyYXBbMTldPTAgICAgICAgICAgICAgICAg R1BJT0YxCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogRm9yIHBpbiBFMTgsIHRoZSBT b0MgQU5EcyB0aGUgZXhwZWN0ZWQgc3RhdGUgb2YgdGhyZWUgYml0cyB0byBkZXRlcm1pbmUgdGhl CisgKiBwaW4ncyBhY3RpdmUgc2lnbmFsOgorICoKKyAqICogU0NVM0NbM106IEVuYWJsZSBleHRl cm5hbCBTT0MgcmVzZXQgZnVuY3Rpb24KKyAqICogU0NVODBbMTVdOiBFbmFibGUgU1BJQ1MxIyBv ciBFWFRSU1QjIGZ1bmN0aW9uIHBpbgorICogKiBTQ1U5MFszMV06IFNlbGVjdCBTUEkgaW50ZXJm YWNlIENTIyBvdXRwdXQKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKiAgRTE4ICAgR1BJ T0I3ICAgIEVYVFJTVCMgICAgIFNDVTNDWzNdPTEgJiBTQ1U4MFsxNV09MSAmIFNDVTkwWzMxXT0w ICAgIFNQSUNTMSMgICAgIFNDVTNDWzNdPTEgJiBTQ1U4MFsxNV09MSAmIFNDVTkwWzMxXT0xICAg R1BJT0I3CisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogKEJpdHMgU0NVM0NbM10gYW5k IFNDVTgwWzE1XSBhcHBlYXIgdG8gb25seSBiZSB1c2VkIGluIHRoZSBleHByZXNzaW9ucyBmb3IK KyAqIHNlbGVjdGluZyB0aGUgc2lnbmFscyBvbiBwaW4gRTE4KQorICoKKyAqIFBpbiBUNSBpcyBh IG11bHRpLXNpZ25hbCBwaW4gd2l0aCBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uOgorICoK KyAqIEJhbGwgfCBEZWZhdWx0IHwgUDAgU2lnbmFsIHwgUDAgRXhwcmVzc2lvbiAgICAgICAgICAg ICAgICB8IFAxIFNpZ25hbCB8IFAxIEV4cHJlc3Npb24gfCBPdGhlcgorICogLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICogIFQ1ICAgIEdQSU9MMSAgICBWUElERSAg ICAgICBTQ1U5MFs1OjRdIT0wICYgU0NVODRbMTddPTEgICAgTkRDRDEgICAgICAgU0NVODRbMTdd PTEgICAgIEdQSU9MMQorICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQorICoKKyAqIFRoZSBoaWdoIHByaW9yaXR5IHNpZ25hbCBjb25maWd1cmF0aW9uIGlzIGJlc3Qg dGhvdWdodCBvZiBpbiB0ZXJtcyBvZiBpdHMKKyAqIGV4cGxvZGVkIGZvcm0sIHdpdGggcmVmZXJl bmNlIHRvIHRoZSBTQ1U5MFs1OjRdIGJpdHM6CisgKgorICogKiBTQ1U5MFs1OjRdPTAwOiBkaXNh YmxlCisgKiAqIFNDVTkwWzU6NF09MDE6IDE4IGJpdHMgKFI2L0c2L0I2KSB2aWRlbyBtb2RlLgor ICogKiBTQ1U5MFs1OjRdPTEwOiAyNCBiaXRzIChSOC9HOC9COCkgdmlkZW8gbW9kZS4KKyAqICog U0NVOTBbNTo0XT0xMTogMzAgYml0cyAoUjEwL0cxMC9CMTApIHZpZGVvIG1vZGUuCisgKgorICog UmUtd3JpdGluZzoKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgKiAgVDUgICAgR1BJT0wxICAgIFZQSURFICAgICAgKFNDVTkwWzU6NF09MSAmIFNDVTg0 WzE3XT0xKSAgICBORENEMSAgICAgICBTQ1U4NFsxN109MSAgICAgR1BJT0wxCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAoU0NVOTBbNTo0XT0yICYgU0NVODRbMTddPTEpCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoU0NVOTBbNTo0XT0zICYgU0NVODRbMTddPTEp CisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogRm9y IHJlZmVyZW5jZSB0aGUgU0NVODRbMTddIGJpdCBjb25maWd1cmUgdGhlICJVQVJUMSBORENEMSBv ciBWaWRlbyBWUElERQorICogZnVuY3Rpb24gcGluIiwgd2hlcmUgdGhlIHNpZ25hbCBpdHNlbGYg aXMgZGV0ZXJtaW5lZCBieSB3aGV0aGVyIFNDVTk0WzU6NF0KKyAqIGlzIGRpc2FibGVkIG9yIGlu IG9uZSBvZiB0aGUgMTgsIDI0IG9yIDMwYml0IHZpZGVvIG1vZGVzLgorICoKKyAqIE90aGVyIHZp ZGVvLWlucHV0LXJlbGF0ZWQgcGlucyByZXF1aXJlIGFuIGV4cGxpY2l0IHN0YXRlIGluIFNDVTkw WzU6NF0sIGUuZy4KKyAqIFcxIGFuZCBVNToKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgKiAgVzEgICAgR1BJT0w2ICAgIFZQSUIwICAgICAgIFNDVTkw WzU6NF09MyAmIFNDVTg0WzIyXT0xICAgICBUWEQxICAgICAgICBTQ1U4NFsyMl09MSAgICAgR1BJ T0w2CisgKiAgVTUgICAgR1BJT0w3ICAgIFZQSUIxICAgICAgIFNDVTkwWzU6NF09MyAmIFNDVTg0 WzIzXT0xICAgICBSWEQxICAgICAgICBTQ1U4NFsyM109MSAgICAgR1BJT0w3CisgKiAtLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogVGhlIGV4YW1wbGVzIG9m IFQ1IGFuZCBXMSBhcmUgcGFydGljdWxhcmx5IGZlcnRpbGUsIGFzIHRoZXkgYWxzbyBkZW1vbnN0 cmF0ZQorICogdGhhdCBkZXNwaXRlIG9wZXJhdGluZyBhcyBwYXJ0IG9mIHRoZSB2aWRlbyBpbnB1 dCBidXMgZWFjaCBzaWduYWwgbmVlZHMgdG8KKyAqIGJlIGVuYWJsZWQgaW5kaXZpZHVhbGx5IHZp YSBpdCdzIG93biBTQ1U4NCAoaW4gdGhlIGNhc2VzIG9mIFQ1IGFuZCBXMSkKKyAqIHJlZ2lzdGVy IGJpdC4gVGhpcyBpcyBhIGxpdHRsZSBjcmF6eSBpZiB0aGUgYnVzIGRvZXNuJ3QgaGF2ZSBvcHRp b25hbAorICogc2lnbmFscywgYnV0IGlzIHVzZWQgdG8gZGVjZW50IGVmZmVjdCB3aXRoIHNvbWUg b2YgdGhlIFVBUlRzIHdoZXJlIG5vdCBhbGwKKyAqIHNpZ25hbHMgYXJlIHJlcXVpcmVkLiBIb3dl dmVyLCB0aGlzIGlzbid0IGRvbmUgY29uc2lzdGVudGx5IC0gVUFSVDEgaXMKKyAqIGVuYWJsZWQg b24gYSBwZXItcGluIGJhc2lzLCBhbmQgYnkgY29udHJhc3QsIGFsbCBzaWduYWxzIGZvciBVQVJU NiBhcmUKKyAqIGVuYWJsZWQgYnkgYSBzaW5nbGUgYml0LgorICoKKyAqIEZ1cnRoZXIsIHRoZSBo aWdoIGFuZCBsb3cgcHJpb3JpdHkgc2lnbmFscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGFib3ZlIHNo YXJlCisgKiBhIGNvbmZpZ3VyYXRpb24gYml0LiBUaGUgVlBJIHNpZ25hbHMgc2hvdWxkIG9wZXJh dGUgaW4gY29uY2VydCBpbiBhIHNpbmdsZQorICogZnVuY3Rpb24sIGJ1dCB0aGUgVUFSVCBzaWdu YWxzIHNob3VsZCByZXRhaW4gdGhlIGFiaWxpdHkgdG8gYmUgY29uZmlndXJlZAorICogaW5kZXBl bmRlbnRseS4gVGhpcyBwdXNoZXMgdGhlIGltcGxlbWVudGF0aW9uIGRvd24gdGhlIHBhdGggb2Yg dGFnZ2luZyBhCisgKiBzaWduYWwncyBleHByZXNzaW9ucyB3aXRoIHRoZSBmdW5jdGlvbiB0aGV5 IHBhcnRpY2lwYXRlIGluLCByYXRoZXIgdGhhbgorICogZGVmaW5pbmcgbWFza3MgYWZmZWN0aW5n IG11bHRpcGxlIHNpZ25hbHMgcGVyIGZ1bmN0aW9uLiBUaGUgbGF0dGVyIGFwcHJvYWNoCisgKiBm YWlscyBpbiB0aGlzIGluc3RhbmNlIHdoZXJlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uIGZv ciB0aGUgVUFSVCBwaW4gb2YKKyAqIGludGVyZXN0IHdpbGwgc3RvbXAgb24gdGhlIHN0YXRlIG9m IG90aGVyIFVBUlQgc2lnbmFscyB3aGVuIGRpc2FibGluZyB0aGUKKyAqIFZQSSBmdW5jdGlvbnMg b24gdGhlIGN1cnJlbnQgcGluLgorICoKKyAqIEJhbGwgfCAgRGVmYXVsdCAgIHwgUDAgU2lnbmFs IHwgUDAgRXhwcmVzc2lvbiAgICAgICAgICAgICB8IFAxIFNpZ25hbCB8IFAxIEV4cHJlc3Npb24g fCBPdGhlcgorICogLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg KiAgQTEyICAgUkdNSUkxVFhDSyAgIEdQSU9UMCAgICAgIFNDVUEwWzBdPTEgICAgICAgICAgICAg ICAgICBSTUlJMVRYRU4gICBTdHJhcFs2XT0wICAgICAgUkdNSUkxVFhDSworICogIEIxMiAgIFJH TUlJMVRYQ1RMICBHUElPVDEgICAgICBTQ1VBMFsxXT0xICAgICAgICAgICAgICAgICAg4oCTICAg ICAgICAgICBTdHJhcFs2XT0wICAgICAgUkdNSUkxVFhDVEwKKyAqIC0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorICoKKyAqIEExMiBkZW1vbnN0cmF0ZXMgdGhhdCB0 aGUgIk90aGVyIiBzaWduYWwgaXNuJ3QgYWx3YXlzIEdQSU8gLSBpbiB0aGlzIGNhc2UKKyAqIEdQ SU9UMCBpcyBhIGhpZ2gtcHJpb3JpdHkgc2lnbmFsIGFuZCBSR01JSTFUWENLIGlzIE90aGVyLiBU aHVzLCBHUElPCisgKiBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBzaWduYWwgdHlw ZSB3aXRoIGZ1bGwgZnVuY3Rpb24gZXhwcmVzc2lvbgorICogcmVxdWlyZW1lbnRzLCBhbmQgbm90 IGFzc3VtZWQgdG8gYmUgdGhlIGRlZmF1bHQgY2FzZS4gU2VwYXJhdGVseSwgR1BJT1QwIGFuZAor ICogR1BJT1QxJ3Mgc2lnbmFsIGRlc2NyaXB0b3IgYml0cyBhcmUgZGlzdGluY3QsIHRoZXJlZm9y ZSB3ZSBtdXN0IGl0ZXJhdGUgYWxsCisgKiBwaW5zIGluIHRoZSBmdW5jdGlvbidzIGdyb3VwIHRv IGRpc2FibGUgdGhlIGhpZ2hlci1wcmlvcml0eSBzaWduYWxzIHN1Y2gKKyAqIHRoYXQgdGhlIHNp Z25hbCBmb3IgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGNvcnJlY3RseSBlbmFibGVkLgor ICoKKyAqIEZpbmFsbHksIHRocmVlIHByaW9yaXR5IGxldmVscyBhcmVuJ3QgYWx3YXlzIGVub3Vn aDsgdGhlIEFTVDI1MDAgYnJpbmdzIHdpdGgKKyAqIGl0IDE4IHBpbnMgb2YgZml2ZSBwcmlvcml0 eSBsZXZlbHMsIGhvd2V2ZXIgdGhlIDE4IHBpbnMgb25seSB1c2UgdGhyZWUgb2YKKyAqIHRoZSBm aXZlIHByaW9yaXR5IGxldmVscy4KKyAqCisgKiBVbHRpbWF0ZWx5IHRoZSByZXF1aXJlbWVudCB0 byBjb250cm9sIHBpbnMgaW4gdGhlIGV4YW1wbGVzIGFib3ZlIGRyaXZlIHRoZQorICogZGVzaWdu OgorICoKKyAqICogUGlucyBwcm92aWRlIHNpZ25hbHMgYWNjb3JkaW5nIHRvIGZ1bmN0aW9ucyBh Y3RpdmF0ZWQgaW4gdGhlIG11eAorICogICBjb25maWd1cmF0aW9uCisgKgorICogKiBQaW5zIHBy b3ZpZGUgdXAgdG8gZml2ZSBzaWduYWwgdHlwZXMgaW4gYSBwcmlvcml0eSBvcmRlcgorICoKKyAq ICogRm9yIHByaW9yaXRpZXMgbGV2ZWxzIGRlZmluZWQgb24gYSBwaW4sIGVhY2ggcHJpb3JpdHkg cHJvdmlkZXMgb25lIHNpZ25hbAorICoKKyAqICogRW5hYmxpbmcgbG93ZXIgcHJpb3JpdHkgc2ln bmFscyByZXF1aXJlcyBoaWdoZXIgcHJpb3JpdHkgc2lnbmFscyBiZQorICogICBkaXNhYmxlZAor ICoKKyAqICogQSBmdW5jdGlvbiByZXByZXNlbnRzIGEgc2V0IG9mIHNpZ25hbHM7IGZ1bmN0aW9u cyBhcmUgZGlzdGluY3QgaWYgdGhlaXIKKyAqICAgc2V0cyBvZiBzaWduYWxzIGFyZSBub3QgZXF1 YWwKKyAqCisgKiAqIFNpZ25hbHMgcGFydGljaXBhdGUgaW4gb25lIG9yIG1vcmUgZnVuY3Rpb25z CisgKgorICogKiBBIGZ1bmN0aW9uIGlzIGRlc2NyaWJlZCBieSBhbiBleHByZXNzaW9uIG9mIG9u ZSBvciBtb3JlIHNpZ25hbAorICogICBkZXNjcmlwdG9ycywgd2hpY2ggY29tcGFyZSBiaXQgdmFs dWVzIGluIGEgcmVnaXN0ZXIKKyAqCisgKiAqIEEgc2lnbmFsIGV4cHJlc3Npb24gaXMgdGhlIHNt YWxsZXN0IHNldCBvZiBzaWduYWwgZGVzY3JpcHRvcnMgd2hvc2UKKyAqICAgY29tcGFyaXNvbnMg bXVzdCBldmFsdWF0ZSAndHJ1ZScgZm9yIGEgc2lnbmFsIHRvIGJlIGVuYWJsZWQgb24gYSBwaW4u CisgKgorICogKiBBIGZ1bmN0aW9uJ3Mgc2lnbmFsIGlzIGFjdGl2ZSBvbiBhIHBpbiBpZiBldmFs dWF0aW5nIGFsbCBzaWduYWwKKyAqICAgZGVzY3JpcHRvcnMgaW4gdGhlIHBpbidzIHNpZ25hbCBl eHByZXNzaW9uIGZvciB0aGUgZnVuY3Rpb24geWllbGRzIGEgJ3RydWUnCisgKiAgIHJlc3VsdAor ICoKKyAqICogQSBzaWduYWwgYXQgYSBnaXZlbiBwcmlvcml0eSBvbiBhIGdpdmVuIHBpbiBpcyBh Y3RpdmUgaWYgYW55IG9mIHRoZQorICogICBmdW5jdGlvbnMgaW4gd2hpY2ggdGhlIHNpZ25hbCBw YXJ0aWNpcGF0ZXMgYXJlIGFjdGl2ZSwgYW5kIG5vIGhpZ2hlcgorICogICBwcmlvcml0eSBzaWdu YWwgb24gdGhlIHBpbiBpcyBhY3RpdmUKKyAqCisgKiAqIEdQSU8gaXMgY29uZmlndXJlZCBwZXIt cGluCisgKgorICogQW5kIHNvOgorICoKKyAqICogVG8gZGlzYWJsZSBhIHNpZ25hbCwgYW55IGZ1 bmN0aW9uKHMpIGFjdGl2YXRpbmcgdGhlIHNpZ25hbCBtdXN0IGJlCisgKiAgIGRpc2FibGVkCisg KgorICogKiBFYWNoIHBpbiBtdXN0IGtub3cgdGhlIHNpZ25hbCBleHByZXNzaW9ucyBvZiBmdW5j dGlvbnMgaW4gd2hpY2ggaXQKKyAqICAgcGFydGljaXBhdGVzLCBmb3IgdGhlIHB1cnBvc2Ugb2Yg ZW5hYmxpbmcgdGhlIE90aGVyIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUKKyAqICAgYnkgZGVhY3Rp dmF0aW5nIGFsbCBmdW5jdGlvbnMgdGhhdCBhY3RpdmF0ZSBoaWdoZXIgcHJpb3JpdHkgc2lnbmFs cyBvbiB0aGUKKyAqICAgcGluLgorICoKKyAqIEFzIGEgY29uY3JldGUgZXhhbXBsZToKKyAqCisg KiAqIFQ1IHByb3ZpZGVzIHRocmVlIHNpZ25hbHMgdHlwZXM6IFZQSURFLCBORENEMSBhbmQgR1BJ TworICoKKyAqICogVGhlIFZQSURFIHNpZ25hbCBwYXJ0aWNpcGF0ZXMgaW4gMyBmdW5jdGlvbnM6 IFZQSTE4LCBWUEkyNCBhbmQgVlBJMzAKKyAqCisgKiAqIFRoZSBORENEMSBzaWduYWwgcGFydGlj aXBhdGVzIGluIGp1c3QgaXRzIG93biBORENEMSBmdW5jdGlvbgorICoKKyAqICogVlBJREUgaXMg aGlnaCBwcmlvcml0eSwgTkRDRDEgaXMgbG93IHByaW9yaXR5LCBhbmQgR1BJT0wxIGlzIHRoZSBs ZWFzdAorICogICBwcmlvcml0aXNlZAorICoKKyAqICogVGhlIHByZXJlcXVpc2l0IGZvciBhY3Rp dmF0aW5nIHRoZSBORENEMSBzaWduYWwgaXMgdGhhdCB0aGUgVlBJMTgsIFZQSTI0CisgKiAgIGFu ZCBWUEkzMCBmdW5jdGlvbnMgYWxsIGJlIGRpc2FibGVkCisgKgorICogKiBTaW1pbGFybHksIGFs bCBvZiBWUEkxOCwgVlBJMjQsIFZQSTMwIGFuZCBORENEMSBmdW5jdGlvbnMgbXVzdCBiZSBkaXNh YmxlZAorICogICB0byBwcm92aWRlIEdQSU9MNgorICoKKyAqIENvbnNpZGVyYXRpb25zCisgKiAt LS0tLS0tLS0tLS0tLQorICoKKyAqIElmIHBpbmN0cmwgYWxsb3dzIHVzIHRvIGFsbG9jYXRlIGEg cGluIHdlIGNhbiBjb25maWd1cmUgYSBmdW5jdGlvbiB3aXRob3V0CisgKiBjb25jZXJuIGZvciB0 aGUgZnVuY3Rpb24gb2YgYWxyZWFkeSBhbGxvY2F0ZWQgcGlucywgaWYgcGluIGdyb3VwcyBhcmUK KyAqIGNyZWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBTb0MgZnVuY3Rpb25zIGluIHdoaWNoIHRo ZXkgcGFydGljaXBhdGUuIFRoaXMgaXMKKyAqIGludHVpdGl2ZSwgYnV0IGl0IGRpZCBub3QgZmVl bCBvYnZpb3VzIGZyb20gdGhlIGJpdC9waW4gcmVsYXRpb25zaGlwcy4KKyAqCisgKiBDb252ZXJz ZWx5LCBmYWlsaW5nIHRvIGFsbG9jYXRlIGFsbCBwaW5zIGluIGEgZ3JvdXAgaW5kaWNhdGVzIHNv bWUgYml0cyAoYXMKKyAqIHdlbGwgYXMgcGlucykgcmVxdWlyZWQgZm9yIHRoZSBncm91cCdzIGNv bmZpZ3VyYXRpb24gd2lsbCBhbHJlYWR5IGJlIGluIHVzZSwKKyAqIGxpa2VseSBpbiBhIHdheSB0 aGF0J3MgaW5jb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgZmFpbGVkCisg KiBncm91cC4KKyAqLworCisvKgorICogVGhlICJNdWx0aS1mdW5jdGlvbiBQaW5zIE1hcHBpbmcg YW5kIENvbnRyb2wiIHRhYmxlIGluIHRoZSBTb0MgZGF0YXNoZWV0CisgKiByZWZlcmVuY2VzIHJl Z2lzdGVycyBieSB0aGUgZGV2aWNlL29mZnNldCBtbmVtb25pYy4gVGhlIHJlZ2lzdGVyIG1hY3Jv cworICogYmVsb3cgYXJlIG5hbWVkIHRoZSBzYW1lIHdheSB0byBlYXNlIHRyYW5zY3JpcHRpb24g YW5kIHZlcmlmaWNhdGlvbiAoYXMKKyAqIG9wcG9zZWQgdG8gbmFtaW5nIHRoZW0gZS5nLiBQSU5N VVhfQ1RSTF9bMC05XSkuIEZ1cnRoZXIsIHNpZ25hbCBleHByZXNzaW9ucworICogcmVmZXJlbmNl IHJlZ2lzdGVycyBiZXlvbmQgdGhvc2UgZGVkaWNhdGVkIHRvIHBpbm11eCwgc3VjaCBhcyB0aGUg c3lzdGVtCisgKiByZXNldCBjb250cm9sIGFuZCBNQUMgY2xvY2sgY29uZmlndXJhdGlvbiByZWdp c3RlcnMuIFRoZSBBU1QyNTAwIGdvZXMgYSBzdGVwCisgKiBmdXJ0aGVyIGFuZCByZWZlcmVuY2Vz IHJlZ2lzdGVycyBpbiB0aGUgZ3JhcGhpY3MgSVAgYmxvY2ssIGJ1dCB0aGF0IGlzbid0CisgKiBo YW5kbGVkIHlldC4KKyAqLworI2RlZmluZSBTQ1UzQyAgICAgICAgICAgMHgzQyAvKiBTeXN0ZW0g UmVzZXQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0NVNDggICAgICAgICAg IDB4NDggLyogTUFDIEludGVyZmFjZSBDbG9jayBEZWxheSBTZXR0aW5nICovCisjZGVmaW5lIEhX X1NUUkFQMSAgICAgICAweDcwIC8qIEFTVDI0MDAgc3RyYXBwaW5nIGlzIDMzIGJpdHMsIGlzIHNw bGl0ICovCisjZGVmaW5lIFNDVTgwICAgICAgICAgICAweDgwIC8qIE11bHRpLWZ1bmN0aW9uIFBp biBDb250cm9sICMxICovCisjZGVmaW5lIFNDVTg0ICAgICAgICAgICAweDg0IC8qIE11bHRpLWZ1 bmN0aW9uIFBpbiBDb250cm9sICMyICovCisjZGVmaW5lIFNDVTg4ICAgICAgICAgICAweDg4IC8q IE11bHRpLWZ1bmN0aW9uIFBpbiBDb250cm9sICMzICovCisjZGVmaW5lIFNDVThDICAgICAgICAg ICAweDhDIC8qIE11bHRpLWZ1bmN0aW9uIFBpbiBDb250cm9sICM0ICovCisjZGVmaW5lIFNDVTkw ICAgICAgICAgICAweDkwIC8qIE11bHRpLWZ1bmN0aW9uIFBpbiBDb250cm9sICM1ICovCisjZGVm aW5lIFNDVTk0ICAgICAgICAgICAweDk0IC8qIE11bHRpLWZ1bmN0aW9uIFBpbiBDb250cm9sICM2 ICovCisjZGVmaW5lIFNDVUEwICAgICAgICAgICAweEEwIC8qIE11bHRpLWZ1bmN0aW9uIFBpbiBD b250cm9sICM3ICovCisjZGVmaW5lIFNDVUE0ICAgICAgICAgICAweEE0IC8qIE11bHRpLWZ1bmN0 aW9uIFBpbiBDb250cm9sICM4ICovCisjZGVmaW5lIFNDVUE4ICAgICAgICAgICAweEE4IC8qIE11 bHRpLWZ1bmN0aW9uIFBpbiBDb250cm9sICM5ICovCisjZGVmaW5lIEhXX1NUUkFQMiAgICAgICAw eEQwIC8qIFN0cmFwcGluZyAqLworCisgLyoqCisgICogQSBzaWduYWwgZGVzY3JpcHRvciwgd2hp Y2ggZGVzY3JpYmVzIHRoZSByZWdpc3RlciwgYml0cyBhbmQgdGhlCisgICogZW5hYmxlL2Rpc2Fi bGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGNvbXBhcmVkIG9yIHdyaXR0ZW4uCisgICoKKyAgKiBA cmVnOiBUaGUgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gYmFzZSBpbiBieXRlcworICAqIEBtYXNrOiBU aGUgbWFzayB0byBhcHBseSB0byB0aGUgcmVnaXN0ZXIuIFRoZSBsb3dlc3Qgc2V0IGJpdCBvZiB0 aGUgbWFzayBpcworICAqICAgICAgICB1c2VkIHRvIGRlcml2ZSB0aGUgc2hpZnQgdmFsdWUuCisg ICogQGVuYWJsZTogVGhlIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZnVuY3Rpb24uIFZhbHVlIHNo b3VsZCBiZSBpbiB0aGUgTFNCcywKKyAgKiAgICAgICAgICBub3QgYXQgdGhlIHBvc2l0aW9uIG9m IHRoZSBtYXNrLgorICAqIEBkaXNhYmxlOiBUaGUgdmFsdWUgdGhhdCBkaXNhYmxlcyB0aGUgZnVu Y3Rpb24uIFZhbHVlIHNob3VsZCBiZSBpbiB0aGUKKyAgKiAgICAgICAgICAgTFNCcywgbm90IGF0 IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFzay4KKyAgKi8KK3N0cnVjdCBhc3BlZWRfc2lnX2Rlc2Mg eworCXVuc2lnbmVkIGludCByZWc7CisJdTMyIG1hc2s7CisJdTMyIGVuYWJsZTsKKwl1MzIgZGlz YWJsZTsKK307CisKKy8qKgorICogRGVzY3JpYmVzIGEgc2lnbmFsIGV4cHJlc3Npb24uIFRoZSBl eHByZXNzaW9uIGlzIGV2YWx1YXRlZCBieSBBTkRpbmcgdGhlCisgKiBldmFsdWF0aW9uIG9mIHRo ZSBkZXNjcmlwdG9ycy4KKyAqCisgKiBAc2lnbmFsOiBUaGUgc2lnbmFsIG5hbWUgZm9yIHRoZSBw cmlvcml0eSBsZXZlbCBvbiB0aGUgcGluCisgKiBAZnVuY3Rpb246IFRoZSBuYW1lIG9mIHRoZSBm dW5jdGlvbiB0aGUgc2lnbmFsIHBhcnRpY2lwYXRlcyBpbiBmb3IgdGhlCisgKiAgICAgICAgICAg IGFzc29jaWF0ZWQgZXhwcmVzc2lvbgorICogQG5kZXNjczogVGhlIG51bWJlciBvZiBzaWduYWwg ZGVzY3JpcHRvcnMgaW4gdGhlIGV4cHJlc3Npb24KKyAqIEBkZXNjczogUG9pbnRlciB0byBhbiBh cnJheSBvZiBzaWduYWwgZGVzY3JpcHRvcnMgdGhhdCBjb21wcmlzZSB0aGUKKyAqICAgICAgICAg ZnVuY3Rpb24gZXhwcmVzc2lvbgorICovCitzdHJ1Y3QgYXNwZWVkX3NpZ19leHByIHsKKwljb25z dCBjaGFyICpzaWduYWw7CisJY29uc3QgY2hhciAqZnVuY3Rpb247CisJaW50IG5kZXNjczsKKwlj b25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNjczsKK307CisKKy8qKgorICogQSBzdHJ1 Y3QgY2FwdHVyaW5nIHRoZSBsaXN0IG9mIGV4cHJlc3Npb25zIGVuYWJsaW5nIHNpZ25hbHMgYXQg ZWFjaCBwcmlvcml0eQorICogZm9yIGEgZ2l2ZW4gcGluLiBUaGUgc2lnbmFsIGNvbmZpZ3VyYXRp b24gZm9yIGEgcHJpb3JpdHkgbGV2ZWwgaXMgZXZhbHVhdGVkCisgKiBieSBPUmluZyB0aGUgZXZh bHVhdGlvbiBvZiB0aGUgc2lnbmFsIGV4cHJlc3Npb25zIGluIHRoZSByZXNwZWN0aXZlCisgKiBw cmlvcml0eSdzIGxpc3QuCisgKgorICogQG5hbWU6IEEgbmFtZSBmb3IgdGhlIHBpbgorICogQHBy aW9zOiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgZXhwcmVzc2lvbiBsaXN0IHBvaW50ZXJzCisg KgorICovCitzdHJ1Y3QgYXNwZWVkX3Bpbl9kZXNjIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNv bnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKioqcHJpb3M7Cit9OworCisvKiBNYWNybyBoZWxs ICovCisKKy8qKgorICogU2hvcnQtaGFuZCBtYWNybyBmb3IgZGVzY3JpYmluZyBhIGNvbmZpZ3Vy YXRpb24gZW5hYmxlZCBieSB0aGUgc3RhdGUgb2Ygb25lCisgKiBiaXQuIFRoZSBkaXNhYmxlIHZh bHVlIGlzIGRlcml2ZWQuCisgKgorICogQHJlZzogVGhlIHNpZ25hbCdzIGFzc29jaWF0ZWQgcmVn aXN0ZXIsIG9mZnNldCBmcm9tIGJhc2UKKyAqIEBpZHg6IFRoZSBzaWduYWwncyBiaXQgaW5kZXgg aW4gdGhlIHJlZ2lzdGVyCisgKiBAdmFsOiBUaGUgdmFsdWUgKDAgb3IgMSkgdGhhdCBlbmFibGVz IHRoZSBmdW5jdGlvbgorICovCisjZGVmaW5lIFNJR19ERVNDX0JJVChyZWcsIGlkeCwgdmFsKSBc CisJeyByZWcsIEJJVF9NQVNLKGlkeCksIHZhbCwgKCgodmFsKSArIDEpICYgMSkgfQorCisvKioK KyAqIEEgZnVydGhlciBzaG9ydC1oYW5kIG1hY3JvIGRlc2NyaWJpbmcgYSBjb25maWd1cmF0aW9u IGVuYWJsZWQgd2l0aCBhIHNldCBiaXQuCisgKgorICogQHJlZzogVGhlIGNvbmZpZ3VyYXRpb24n cyBhc3NvY2lhdGVkIHJlZ2lzdGVyLCBvZmZzZXQgZnJvbSBiYXNlCisgKiBAaWR4OiBUaGUgY29u ZmlndXJhdGlvbidzIGJpdCBpbmRleCBpbiB0aGUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBTSUdf REVTQ19TRVQocmVnLCBpZHgpIFNJR19ERVNDX0JJVChyZWcsIGlkeCwgMSkKKworI2RlZmluZSBT SUdfREVTQ19MSVNUX1NZTShzaWcsIGZ1bmMpIHNpZ19kZXNjc18gIyMgc2lnICMjIF8gIyMgZnVu YworI2RlZmluZSBTSUdfREVTQ19MSVNUX0RFQ0woc2lnLCBmdW5jLCAuLi4pIFwKKwlzdGF0aWMg Y29uc3Qgc3RydWN0IGFzcGVlZF9zaWdfZGVzYyBTSUdfREVTQ19MSVNUX1NZTShzaWcsIGZ1bmMp W10gPSBcCisJCXsgX19WQV9BUkdTX18gfQorCisjZGVmaW5lIFNJR19FWFBSX1NZTShzaWcsIGZ1 bmMpIHNpZ19leHByXyAjIyBzaWcgIyMgXyAjIyBmdW5jCisjZGVmaW5lIFNJR19FWFBSX0RFQ0xf KHNpZywgZnVuYykgXAorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByIFNJR19F WFBSX1NZTShzaWcsIGZ1bmMpID0gXAorCXsgXAorCQkuc2lnbmFsID0gI3NpZywgXAorCQkuZnVu Y3Rpb24gPSAjZnVuYywgXAorCQkubmRlc2NzID0gQVJSQVlfU0laRShTSUdfREVTQ19MSVNUX1NZ TShzaWcsIGZ1bmMpKSwgXAorCQkuZGVzY3MgPSAmKFNJR19ERVNDX0xJU1RfU1lNKHNpZywgZnVu YykpWzBdLCBcCisJfQorCisvKioKKyAqIERlY2xhcmUgYSBzaWduYWwgZXhwcmVzc2lvbi4KKyAq CisgKiBAc2lnOiBBIG1hY3JvIHN5bWJvbCBuYW1lIGZvciB0aGUgc2lnbmFsIChpcyBzdWJqZWN0 ZWQgdG8gc3RyaW5naWZpY2F0aW9uCisgKiAgICAgICAgYW5kIHRva2VuIHBhc3RpbmcpCisgKiBA ZnVuYzogVGhlIGZ1bmN0aW9uIGluIHdoaWNoIHRoZSBzaWduYWwgaXMgcGFydGljaXBhdGluZwor ICogQC4uLjogU2lnbmFsIGRlc2NyaXB0b3JzIHRoYXQgZGVmaW5lIHRoZSBzaWduYWwgZXhwcmVz c2lvbgorICoKKyAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGRlY2xhcmVzIHRoZSBST01E OCBzaWduYWwgZm9yIHRoZSBST00xNiBmdW5jdGlvbjoKKyAqCisgKiAgICAgU0lHX0VYUFJfREVD TChST01EOCwgUk9NMTYsIFNJR19ERVNDX1NFVChTQ1U5MCwgNikpOworICoKKyAqIEFuZCB3aXRo IG11bHRpcGxlIHNpZ25hbCBkZXNjcmlwdG9yczoKKyAqCisgKiAgICAgU0lHX0VYUFJfREVDTChS T01EOCwgUk9NMTZTLCBTSUdfREVTQ19TRVQoSFdfU1RSQVAxLCA0KSwKKyAqICAgICAgICAgICAg ICB7IEhXX1NUUkFQMSwgR0VOTUFTSygxLCAwKSwgMCwgMCB9KTsKKyAqLworI2RlZmluZSBTSUdf RVhQUl9ERUNMKHNpZywgZnVuYywgLi4uKSBcCisJU0lHX0RFU0NfTElTVF9ERUNMKHNpZywgZnVu YywgX19WQV9BUkdTX18pOyBcCisJU0lHX0VYUFJfREVDTF8oc2lnLCBmdW5jKQorCisvKioKKyAq IERlY2xhcmUgYSBwb2ludGVyIHRvIGEgc2lnbmFsIGV4cHJlc3Npb24KKyAqCisgKiBAc2lnOiBU aGUgbWFjcm8gc3ltYm9sIG5hbWUgZm9yIHRoZSBzaWduYWwgKHN1YmplY3RlZCB0byB0b2tlbiBw YXN0aW5nKQorICogQGZ1bmM6IFRoZSBtYWNybyBzeW1ib2wgbmFtZSBmb3IgdGhlIGZ1bmN0aW9u IChzdWJqZWN0ZWQgdG8gdG9rZW4gcGFzdGluZykKKyAqLworI2RlZmluZSBTSUdfRVhQUl9QVFIo c2lnLCBmdW5jKSAoJlNJR19FWFBSX1NZTShzaWcsIGZ1bmMpKQorCisjZGVmaW5lIFNJR19FWFBS X0xJU1RfU1lNKHNpZykgc2lnX2V4cHJzXyAjIyBzaWcKKworLyoqCisgKiBEZWNsYXJlIGEgc2ln bmFsIGV4cHJlc3Npb24gbGlzdCBmb3IgcmVmZXJlbmNlIGluIGEgc3RydWN0IGFzcGVlZF9waW5f cHJpby4KKyAqCisgKiBAc2lnOiBBIG1hY3JvIHN5bWJvbCBuYW1lIGZvciB0aGUgc2lnbmFsIChp cyBzdWJqZWN0ZWQgdG8gdG9rZW4gcGFzdGluZykKKyAqIEAuLi46IFNpZ25hbCBleHByZXNzaW9u IHN0cnVjdHVyZSBwb2ludGVycyAodXNlIFNJR19FWFBSX1BUUigpKQorICoKKyAqIEZvciBleGFt cGxlLCB0aGUgMTYtYml0IFJPTSBidXMgY2FuIGJlIGVuYWJsZWQgYnkgb25lIG9mIHR3byBwb3Nz aWJsZSBzaWduYWwKKyAqIGV4cHJlc3Npb25zOgorICoKKyAqICAgICBTSUdfRVhQUl9ERUNMKFJP TUQ4LCBST00xNiwgU0lHX0RFU0NfU0VUKFNDVTkwLCA2KSk7CisgKiAgICAgU0lHX0VYUFJfREVD TChST01EOCwgUk9NMTZTLCBTSUdfREVTQ19TRVQoSFdfU1RSQVAxLCA0KSwKKyAqICAgICAgICAg ICAgICB7IEhXX1NUUkFQMSwgR0VOTUFTSygxLCAwKSwgMCwgMCB9KTsKKyAqICAgICBTSUdfRVhQ Ul9MSVNUX0RFQ0woUk9NRDgsIFNJR19FWFBSX1BUUihST01EOCwgUk9NMTYpLAorICogICAgICAg ICAgICAgIFNJR19FWFBSX1BUUihST01EOCwgUk9NMTZTKSk7CisgKi8KKyNkZWZpbmUgU0lHX0VY UFJfTElTVF9ERUNMKHNpZywgLi4uKSBcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc2ln X2V4cHIgKlNJR19FWFBSX0xJU1RfU1lNKHNpZylbXSA9IFwKKwkJeyBfX1ZBX0FSR1NfXywgTlVM TCB9CisKKy8qKgorICogQSBzaG9ydC1oYW5kIG1hY3JvIGZvciBkZWNsYXJpbmcgYSBmdW5jdGlv biBleHByZXNzaW9uIGFuZCBhbiBleHByZXNzaW9uCisgKiBsaXN0IHdpdGggYSBzaW5nbGUgZnVu Y3Rpb24uCisgKgorICogQGZ1bmM6IEEgbWFjcm8gc3ltYm9sIG5hbWUgZm9yIHRoZSBmdW5jdGlv biAoaXMgc3ViamVjdGVkIHRvIHRva2VuIHBhc3RpbmcpCisgKiBALi4uOiBGdW5jdGlvbiBkZXNj cmlwdG9ycyB0aGF0IGRlZmluZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbgorICoKKyAqIEZvciBl eGFtcGxlLCBzaWduYWwgTkNUUzYgcGFydGljaXBhdGVzIGluIGl0cyBvd24gZnVuY3Rpb24gd2l0 aCBvbmUgZ3JvdXA6CisgKgorICogICAgIFNJR19FWFBSX0xJU1RfREVDTF9TSU5HTEUoTkNUUzYs IE5DVFM2LCBTSUdfREVTQ19TRVQoU0NVOTAsIDcpKTsKKyAqLworI2RlZmluZSBTSUdfRVhQUl9M SVNUX0RFQ0xfU0lOR0xFKHNpZywgZnVuYywgLi4uKSBcCisJU0lHX0RFU0NfTElTVF9ERUNMKHNp ZywgZnVuYywgX19WQV9BUkdTX18pOyBcCisJU0lHX0VYUFJfREVDTF8oc2lnLCBmdW5jKTsgXAor CVNJR19FWFBSX0xJU1RfREVDTChzaWcsIFNJR19FWFBSX1BUUihzaWcsIGZ1bmMpKQorCisjZGVm aW5lIFNJR19FWFBSX0xJU1RfREVDTF9EVUFMKHNpZywgZjAsIGYxKSBcCisJU0lHX0VYUFJfTElT VF9ERUNMKHNpZywgU0lHX0VYUFJfUFRSKHNpZywgZjApLCBTSUdfRVhQUl9QVFIoc2lnLCBmMSkp CisKKyNkZWZpbmUgU0lHX0VYUFJfTElTVF9QVFIoc2lnKSAoJlNJR19FWFBSX0xJU1RfU1lNKHNp ZylbMF0pCisKKyNkZWZpbmUgUElOX0VYUFJTX1NZTShwaW4pIHBpbl9leHByc18gIyMgcGluCisj ZGVmaW5lIFBJTl9FWFBSU19QVFIocGluKSAoJlBJTl9FWFBSU19TWU0ocGluKVswXSkKKyNkZWZp bmUgUElOX1NZTShwaW4pIHBpbl8gIyMgcGluCisKKyNkZWZpbmUgTVNfUElOX0RFQ0xfKHBpbiwg Li4uKSBcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKipQSU5fRVhQUlNf U1lNKHBpbilbXSA9IFwKKwkJeyBfX1ZBX0FSR1NfXywgTlVMTCB9OyBcCisJc3RhdGljIGNvbnN0 IHN0cnVjdCBhc3BlZWRfcGluX2Rlc2MgUElOX1NZTShwaW4pID0gXAorCQl7ICNwaW4sIFBJTl9F WFBSU19QVFIocGluKSB9CisKKy8qKgorICogRGVjbGFyZSBhIG11bHRpLXNpZ25hbCBwaW4KKyAq CisgKiBAcGluOiBUaGUgcGluIG51bWJlcgorICogQG90aGVyOiBNYWNybyBuYW1lIGZvciAib3Ro ZXIiIGZ1bmN0aW9uYWxpdHkgKHN1YmplY3RlZCB0byBzdHJpbmdpZmljYXRpb24pCisgKiBAaGln aDogTWFjcm8gbmFtZSBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgc2lnbmFsIGZ1bmN0aW9ucwor ICogQGxvdzogTWFjcm8gbmFtZSBmb3IgdGhlIGxvdyBzaWduYWwgZnVuY3Rpb25zCisgKgorICog Rm9yIGV4YW1wbGU6CisgKgorICogICAgICNkZWZpbmUgQTggNTYKKyAqICAgICBTSUdfRVhQUl9E RUNMKFJPTUQ4LCBST00xNiwgU0lHX0RFU0NfU0VUKFNDVTkwLCA2KSk7CisgKiAgICAgU0lHX0VY UFJfREVDTChST01EOCwgUk9NMTZTLCBTSUdfREVTQ19TRVQoSFdfU1RSQVAxLCA0KSwKKyAqICAg ICAgICAgICAgICB7IEhXX1NUUkFQMSwgR0VOTUFTSygxLCAwKSwgMCwgMCB9KTsKKyAqICAgICBT SUdfRVhQUl9MSVNUX0RFQ0woUk9NRDgsIFNJR19FWFBSX1BUUihST01EOCwgUk9NMTYpLAorICog ICAgICAgICAgICAgIFNJR19FWFBSX1BUUihST01EOCwgUk9NMTZTKSk7CisgKiAgICAgU0lHX0VY UFJfTElTVF9ERUNMX1NJTkdMRShOQ1RTNiwgTkNUUzYsIFNJR19ERVNDX1NFVChTQ1U5MCwgNykp OworICogICAgIE1TX1BJTl9ERUNMKEE4LCBHUElPSDAsIFJPTUQ4LCBOQ1RTNik7CisgKi8KKyNk ZWZpbmUgTVNfUElOX0RFQ0wocGluLCBvdGhlciwgaGlnaCwgbG93KSBcCisJU0lHX0VYUFJfTElT VF9ERUNMX1NJTkdMRShvdGhlciwgb3RoZXIpOyBcCisJTVNfUElOX0RFQ0xfKHBpbiwgXAorCQkJ U0lHX0VYUFJfTElTVF9QVFIoaGlnaCksIFwKKwkJCVNJR19FWFBSX0xJU1RfUFRSKGxvdyksIFwK KwkJCVNJR19FWFBSX0xJU1RfUFRSKG90aGVyKSkKKworI2RlZmluZSBQSU5fR1JPVVBfU1lNKGZ1 bmMpIHBpbnNfICMjIGZ1bmMKKyNkZWZpbmUgRlVOQ19HUk9VUF9TWU0oZnVuYykgZ3JvdXBzXyAj IyBmdW5jCisjZGVmaW5lIEZVTkNfR1JPVVBfREVDTChmdW5jLCAuLi4pIFwKKwlzdGF0aWMgY29u c3QgaW50IFBJTl9HUk9VUF9TWU0oZnVuYylbXSA9IHsgX19WQV9BUkdTX18gfTsgXAorCXN0YXRp YyBjb25zdCBjaGFyICpjb25zdCBGVU5DX0dST1VQX1NZTShmdW5jKVtdID0geyAjZnVuYyB9CisK Ky8qKgorICogRGVjbGFyZSBhIHNpbmdsZSBzaWduYWwgcGluCisgKgorICogQHBpbjogVGhlIHBp biBudW1iZXIKKyAqIEBvdGhlcjogTWFjcm8gbmFtZSBmb3IgIm90aGVyIiBmdW5jdGlvbmFsaXR5 IChzdWJqZWN0ZWQgdG8gc3RyaW5naWZpY2F0aW9uKQorICogQHNpZzogTWFjcm8gbmFtZSBmb3Ig dGhlIHNpZ25hbCAoc3ViamVjdGVkIHRvIHN0cmluZ2lmaWNhdGlvbikKKyAqCisgKiBGb3IgZXhh bXBsZToKKyAqCisgKiAgICAgI2RlZmluZSBFMyA4MAorICogICAgIFNJR19FWFBSX0xJU1RfREVD TF9TSU5HTEUoU0NMNSwgSTJDNSwgSTJDNV9ERVNDKTsKKyAqICAgICBTU19QSU5fREVDTChFMywg R1BJT0swLCBTQ0w1KTsKKyAqLworI2RlZmluZSBTU19QSU5fREVDTChwaW4sIG90aGVyLCBzaWcp IFwKKwlTSUdfRVhQUl9MSVNUX0RFQ0xfU0lOR0xFKG90aGVyLCBvdGhlcik7IFwKKwlNU19QSU5f REVDTF8ocGluLCBTSUdfRVhQUl9MSVNUX1BUUihzaWcpLCBTSUdfRVhQUl9MSVNUX1BUUihvdGhl cikpCisKKy8qKgorICogU2luZ2xlIHNpZ25hbCwgc2luZ2xlIGZ1bmN0aW9uIHBpbiBkZWNsYXJh dGlvbgorICoKKyAqIEBwaW46IFRoZSBwaW4gbnVtYmVyCisgKiBAb3RoZXI6IE1hY3JvIG5hbWUg Zm9yICJvdGhlciIgZnVuY3Rpb25hbGl0eSAoc3ViamVjdGVkIHRvIHN0cmluZ2lmaWNhdGlvbikK KyAqIEBzaWc6IE1hY3JvIG5hbWUgZm9yIHRoZSBzaWduYWwgKHN1YmplY3RlZCB0byBzdHJpbmdp ZmljYXRpb24pCisgKiBALi4uOiBTaWduYWwgZGVzY3JpcHRvcnMgdGhhdCBkZWZpbmUgdGhlIGZ1 bmN0aW9uIGV4cHJlc3Npb24KKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqCisgKiAgICBTU1NGX1BJ Tl9ERUNMKEE0LCBHUElPQTIsIFRJTUVSMywgU0lHX0RFU0NfU0VUKFNDVTgwLCAyKSk7CisgKi8K KyNkZWZpbmUgU1NTRl9QSU5fREVDTChwaW4sIG90aGVyLCBzaWcsIC4uLikgXAorCVNJR19FWFBS X0xJU1RfREVDTF9TSU5HTEUoc2lnLCBzaWcsIF9fVkFfQVJHU19fKTsgXAorCVNJR19FWFBSX0xJ U1RfREVDTF9TSU5HTEUob3RoZXIsIG90aGVyKTsgXAorCU1TX1BJTl9ERUNMXyhwaW4sIFNJR19F WFBSX0xJU1RfUFRSKHNpZyksIFNJR19FWFBSX0xJU1RfUFRSKG90aGVyKSk7IFwKKwlGVU5DX0dS T1VQX0RFQ0woc2lnLCBwaW4pCisKK3N0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhIHsKKwlzdHJ1 Y3QgcmVnbWFwICptYXA7CisKKwljb25zdCBzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGluczsK Kwljb25zdCB1bnNpZ25lZCBpbnQgbnBpbnM7CisKKwljb25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbl9n cm91cCAqZ3JvdXBzOworCWNvbnN0IHVuc2lnbmVkIGludCBuZ3JvdXBzOworCisJY29uc3Qgc3Ry dWN0IGFzcGVlZF9waW5fZnVuY3Rpb24gKmZ1bmN0aW9uczsKKwljb25zdCB1bnNpZ25lZCBpbnQg bmZ1bmN0aW9uczsKK307CisKKyNkZWZpbmUgQVNQRUVEX1BJTkNUUkxfUElOKG5hbWVfKSBcCisJ W25hbWVfXSA9IHsgXAorCQkubnVtYmVyID0gbmFtZV8sIFwKKwkJLm5hbWUgPSAjbmFtZV8sIFwK KwkJLmRydl9kYXRhID0gKHZvaWQgKikgJihQSU5fU1lNKG5hbWVfKSkgXAorCX0KKworc3RydWN0 IGFzcGVlZF9waW5fZ3JvdXAgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgdW5zaWduZWQg aW50ICpwaW5zOworCWNvbnN0IHVuc2lnbmVkIGludCBucGluczsKK307CisKKyNkZWZpbmUgQVNQ RUVEX1BJTkNUUkxfR1JPVVAobmFtZV8pIHsgXAorCS5uYW1lID0gI25hbWVfLCBcCisJLnBpbnMg PSAmKFBJTl9HUk9VUF9TWU0obmFtZV8pKVswXSwgXAorCS5ucGlucyA9IEFSUkFZX1NJWkUoUElO X0dST1VQX1NZTShuYW1lXykpLCBcCit9CisKK3N0cnVjdCBhc3BlZWRfcGluX2Z1bmN0aW9uIHsK Kwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNvbnN0ICpncm91cHM7CisJdW5zaWdu ZWQgaW50IG5ncm91cHM7Cit9OworCisjZGVmaW5lIEFTUEVFRF9QSU5DVFJMX0ZVTkMobmFtZV8s IC4uLikgeyBcCisJLm5hbWUgPSAjbmFtZV8sIFwKKwkuZ3JvdXBzID0gJkZVTkNfR1JPVVBfU1lN KG5hbWVfKVswXSwgXAorCS5uZ3JvdXBzID0gQVJSQVlfU0laRShGVU5DX0dST1VQX1NZTShuYW1l XykpLCBcCit9CisKK2ludCBhc3BlZWRfcGluY3RybF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBw aW5jdHJsX2RldiAqcGN0bGRldik7Citjb25zdCBjaGFyICphc3BlZWRfcGluY3RybF9nZXRfZ3Jv dXBfbmFtZShzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCXVuc2lnbmVkIGludCBncm91 cCk7CitpbnQgYXNwZWVkX3BpbmN0cmxfZ2V0X2dyb3VwX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2 ICpwY3RsZGV2LAorCQl1bnNpZ25lZCBpbnQgZ3JvdXAsIGNvbnN0IHVuc2lnbmVkIGludCAqKnBp bnMsCisJCXVuc2lnbmVkIGludCAqbnBpbnMpOwordm9pZCBhc3BlZWRfcGluY3RybF9waW5fZGJn X3Nob3coc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHVuc2lnbmVkIGludCBvZmZzZXQpOworaW50IGFzcGVlZF9waW5tdXhfZ2V0X2ZuX2NvdW50KHN0 cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldik7Citjb25zdCBjaGFyICphc3BlZWRfcGlubXV4X2dl dF9mbl9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJdW5zaWduZWQgaW50IGZ1 bmN0aW9uKTsKK2ludCBhc3BlZWRfcGlubXV4X2dldF9mbl9ncm91cHMoc3RydWN0IHBpbmN0cmxf ZGV2ICpwY3RsZGV2LAorCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNvbnN0IGNoYXIgKiBjb25z dCAqKmdyb3VwcywKKwkJdW5zaWduZWQgaW50ICogY29uc3QgbnVtX2dyb3Vwcyk7CitpbnQgYXNw ZWVkX3Bpbm11eF9zZXRfbXV4KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwgdW5zaWduZWQg aW50IGZ1bmN0aW9uLAorCQl1bnNpZ25lZCBpbnQgZ3JvdXApOworaW50IGFzcGVlZF9ncGlvX3Jl cXVlc3RfZW5hYmxlKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJc3RydWN0IHBpbmN0 cmxfZ3Bpb19yYW5nZSAqcmFuZ2UsCisJCXVuc2lnbmVkIGludCBvZmZzZXQpOworaW50IGFzcGVl ZF9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBw aW5jdHJsX2Rlc2MgKnBkZXNjLAorCQlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAqcGRhdGEp OworCisjZW5kaWYgLyogUElOQ1RSTF9BU1BFRUQgKi8KLS0gCjIuNy40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=