From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: [PATCH v4 20/21] libxl/acpi: Build ACPI tables for HVMlite guests Date: Mon, 19 Sep 2016 20:19:38 -0400 Message-ID: <1474330779-10645-21-git-send-email-boris.ostrovsky@oracle.com> References: <1474330779-10645-1-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1474330779-10645-1-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, julien.grall@arm.com, jbeulich@suse.com, zhaoshenglong@huawei.com, Boris Ostrovsky , roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNv bT4KLS0tCkNoYW5nZXMgaW4gdjQ6CiogUmVtb3ZlIGFsbG9jYXRpb24tc3BlY2lmaWMgZmllbGRz IGZyb20gc3RydWN0IGFjcGlfY3R4dCBhbmQgdXNlCiAgYW4gZW5jbG9zaW5nIHN0cnVjdCBsaWJ4 bF9hY3BpX2N0eHQuCiogVXNlIHByaXZhdGUgc3RydWN0IGh2bWluZm8gKHRvIGRlYWwgd2l0aCBj b25zdGlmaWVkIHN0cnVjdAogIGFjcGlfY29uZmlnLT5odm1pbmZvKQoKIC5naXRpZ25vcmUgICAg ICAgICAgICAgICAgICAgfCAgMTIgKystCiB0b29scy9saWJhY3BpL2J1aWxkLmMgICAgICAgIHwg ICA3ICstCiB0b29scy9saWJhY3BpL2xpYmFjcGkuaCAgICAgIHwgICA2ICstCiB0b29scy9saWJ4 bC9NYWtlZmlsZSAgICAgICAgIHwgIDE4ICsrKy0KIHRvb2xzL2xpYnhsL2xpYnhsX2FyY2guaCAg ICAgfCAgIDMgKwogdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgICAgICB8ICAzMCArKysrLS0KIHRv b2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmMgfCAyNDMgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuaCB8ICAzNSAr KysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDMzNCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuaAoKZGlmZiAtLWdpdCBh Ly5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDU3MjBlMGYuLjliNmY1OGUgMTAwNjQ0Ci0t LSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTczLDE1ICsxNzMsMTkgQEAgdG9v bHMvaW5jbHVkZS94ZW4vKgogdG9vbHMvaW5jbHVkZS94ZW4teHNtLyoKIHRvb2xzL2luY2x1ZGUv eGVuLWZvcmVpZ24vKi4oY3xofHNpemUpCiB0b29scy9pbmNsdWRlL3hlbi1mb3JlaWduL2NoZWNr ZXIKLXRvb2xzL2xpYnhsL2xpYnhsdV9jZmdfeS5vdXRwdXQKK3Rvb2xzL2xpYnhsL19saWJ4bC5h cGktZm9yLWNoZWNrCit0b29scy9saWJ4bC8qLmFwaS1vawogdG9vbHMvbGlieGwvKi5wYwogdG9v bHMvbGlieGwvKi5wYy5pbgotdG9vbHMvbGlieGwveGwKK3Rvb2xzL2xpYnhsL2RzZHQqLmMKK3Rv b2xzL2xpYnhsL2RzZHRfKi5hc2wKK3Rvb2xzL2xpYnhsL2xpYnhsdV9jZmdfeS5vdXRwdXQKK3Rv b2xzL2xpYnhsL21rX2RzZHQKK3Rvb2xzL2xpYnhsL3NzZHRfKi5oCiB0b29scy9saWJ4bC90ZXN0 ZW51bQogdG9vbHMvbGlieGwvdGVzdGVudW0uYwogdG9vbHMvbGlieGwvdG1wLioKLXRvb2xzL2xp YnhsL19saWJ4bC5hcGktZm9yLWNoZWNrCi10b29scy9saWJ4bC8qLmFwaS1vawordG9vbHMvbGli eGwveGwKIHRvb2xzL21pc2MvY3B1cGVyZi9jcHVwZXJmLXBlcmZjbnRyCiB0b29scy9taXNjL2Nw dXBlcmYvY3B1cGVyZi14ZW4KIHRvb2xzL21pc2MveGNfc2hhZG93CmRpZmYgLS1naXQgYS90b29s cy9saWJhY3BpL2J1aWxkLmMgYi90b29scy9saWJhY3BpL2J1aWxkLmMKaW5kZXggMDBmYjY3ZS4u NDdkYWUwMSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliYWNwaS9idWlsZC5jCisrKyBiL3Rvb2xzL2xp YmFjcGkvYnVpbGQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgInNzZHRfczQuaCIKICNp bmNsdWRlICJzc2R0X3RwbS5oIgogI2luY2x1ZGUgInNzZHRfcG0uaCIKKyNpbmNsdWRlIDx4ZW4v aHZtL2h2bV9pbmZvX3RhYmxlLmg+CiAjaW5jbHVkZSA8eGVuL2h2bS9odm1feHNfc3RyaW5ncy5o PgogI2luY2x1ZGUgPHhlbi9odm0vcGFyYW1zLmg+CiAjaW5jbHVkZSA8eGVuL21lbW9yeS5oPgpA QCAtNDk2LDcgKzQ5Nyw3IEBAIHN0YXRpYyBpbnQgbmV3X3ZtX2dpZChzdHJ1Y3QgYWNwaV9jdHh0 ICpjdHh0LAogICAgIHJldHVybiAxOwogfQogCi12b2lkIGFjcGlfYnVpbGRfdGFibGVzKHN0cnVj dCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnKQoraW50IGFjcGlf YnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAq Y29uZmlnKQogewogICAgIHN0cnVjdCBhY3BpX2luZm8gKmFjcGlfaW5mbzsKICAgICBzdHJ1Y3Qg YWNwaV8yMF9yc2RwICpyc2RwOwpAQCAtNjMxLDExICs2MzIsMTEgQEAgdm9pZCBhY3BpX2J1aWxk X3RhYmxlcyhzdHJ1Y3QgYWNwaV9jdHh0ICpjdHh0LCBzdHJ1Y3QgYWNwaV9jb25maWcgKmNvbmZp ZykKICAgICBpZiAoICFuZXdfdm1fZ2lkKGN0eHQsIGNvbmZpZywgYWNwaV9pbmZvKSApCiAgICAg ICAgIGdvdG8gb29tOwogCi0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBvb206CiAgICAg cHJpbnRmKCJ1bmFibGUgdG8gYnVpbGQgQUNQSSB0YWJsZXM6IG91dCBvZiBtZW1vcnlcbiIpOwot CisgICAgcmV0dXJuIC0xOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliYWNwaS9saWJh Y3BpLmggYi90b29scy9saWJhY3BpL2xpYmFjcGkuaAppbmRleCBlMzg2MzYyLi4xZDM4OGY5IDEw MDY0NAotLS0gYS90b29scy9saWJhY3BpL2xpYmFjcGkuaAorKysgYi90b29scy9saWJhY3BpL2xp YmFjcGkuaApAQCAtNzgsMTAgKzc4LDEwIEBAIHN0cnVjdCBhY3BpX2NvbmZpZyB7CiAgICAgICog VGhpcyBtdXN0IG1hdGNoIHRoZSBPcGVyYXRpb25SZWdpb24oQklPUywgU3lzdGVtTWVtb3J5LCAu Li4uKQogICAgICAqIGRlZmluaXRpb24gaW4gdGhlIERTRFQKICAgICAgKi8KLSAgICB1bnNpZ25l ZCBpbnQgaW5mb3A7CisgICAgdW5zaWduZWQgbG9uZyBpbmZvcDsKIAogICAgIC8qIFJTRFAgYWRk cmVzcyAqLwotICAgIHVuc2lnbmVkIGludCByc2RwOworICAgIHVuc2lnbmVkIGxvbmcgcnNkcDsK IAogICAgIC8qIHg4Ni1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCiAgICAgdWludDhfdCAoKmxhcGlj X2lkKSh1bnNpZ25lZCBjcHUpOwpAQCAtOTEsNyArOTEsNyBAQCBzdHJ1Y3QgYWNwaV9jb25maWcg ewogICAgIHVpbnQ4X3QgaW9hcGljX2lkOwogfTsKIAotdm9pZCBhY3BpX2J1aWxkX3RhYmxlcyhz dHJ1Y3QgYWNwaV9jdHh0ICpjdHh0LCBzdHJ1Y3QgYWNwaV9jb25maWcgKmNvbmZpZyk7CitpbnQg YWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgc3RydWN0IGFjcGlfY29u ZmlnICpjb25maWcpOwogCiAjZW5kaWYgLyogX19MSUJBQ1BJX0hfXyAqLwogCmRpZmYgLS1naXQg YS90b29scy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCmluZGV4IDkwNDI3 ZmYuLjMzNjM1OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xz L2xpYnhsL01ha2VmaWxlCkBAIC03NSw3ICs3NSwyMSBAQCBlbHNlCiBMSUJYTF9PQkpTLXkgKz0g bGlieGxfbm9fY29sby5vCiBlbmRpZgogCi1MSUJYTF9PQkpTLSQoQ09ORklHX1g4NikgKz0gbGli eGxfY3B1aWQubyBsaWJ4bF94ODYubyBsaWJ4bF9wc3IubworQUNQSV9QQVRIICA9ICQoWEVOX1JP T1QpL3Rvb2xzL2xpYmFjcGkKK0FDUElfRklMRVMgPSBkc2R0X3B2aC5jCitBQ1BJX09CSlMgID0g JChwYXRzdWJzdCAlLmMsJS5vLCQoQUNQSV9GSUxFUykpIGJ1aWxkLm8gc3RhdGljX3RhYmxlcy5v CiskKEFDUElfRklMRVMpOiBhY3BpCiskKEFDUElfT0JKUyk6IENGTEFHUyArPSAtSS4gLURMSUJB Q1BJX1NURFVUSUxTPVwiJChDVVJESVIpL2xpYnhsX3g4Nl9hY3BpLmhcIgordnBhdGggYnVpbGQu YyAkKEFDUElfUEFUSCkvCit2cGF0aCBzdGF0aWNfdGFibGVzLmMgJChBQ1BJX1BBVEgpLworTElC WExfT0JKUy0kKENPTkZJR19YODYpICs9ICQoQUNQSV9PQkpTKQorCisuUEhPTlk6IGFjcGkKK2Fj cGk6CisJJChNQUtFKSAtQyAkKEFDUElfUEFUSCkgQUNQSV9CVUlMRF9ESVI9JChDVVJESVIpCist aW5jbHVkZSBhY3BpCisKK0xJQlhMX09CSlMtJChDT05GSUdfWDg2KSArPSBsaWJ4bF9jcHVpZC5v IGxpYnhsX3g4Ni5vIGxpYnhsX3Bzci5vIGxpYnhsX3g4Nl9hY3BpLm8KIExJQlhMX09CSlMtJChD T05GSUdfQVJNKSArPSBsaWJ4bF9ub2NwdWlkLm8gbGlieGxfYXJtLm8gbGlieGxfbGliZmR0X2Nv bXBhdC5vCiAKIGlmZXEgKCQoQ09ORklHX05ldEJTRCkseSkKQEAgLTE2Nyw2ICsxODEsNyBAQCAk KFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfWEwpCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0g LWluY2x1ZGUgJChYRU5fUk9PVCkvdG9vbHMvY29uZmlnLmggIyBsaWJ4bF9qc29uLmggbmVlZHMg aXQuCiAKIGxpYnhsX2RvbS5vOiBDRkxBR1MgKz0gLUkkKFhFTl9ST09UKS90b29scyAgIyBpbmNs dWRlIGxpYmFjcGkveDg2LmgKK2xpYnhsX3g4Nl9hY3BpLm86IENGTEFHUyArPSAtSSQoWEVOX1JP T1QpL3Rvb2xzCiAKIFNBVkVfSEVMUEVSX09CSlMgPSBsaWJ4bF9zYXZlX2hlbHBlci5vIF9saWJ4 bF9zYXZlX21zZ3NfaGVscGVyLm8KICQoU0FWRV9IRUxQRVJfT0JKUyk6IENGTEFHUyArPSAkKENG TEFHU19saWJ4ZW5jdHJsKSAkKENGTEFHU19saWJ4ZW5ldnRjaG4pCkBAIC0zMDksNiArMzI0LDcg QEAgY2xlYW46CiAJJChSTSkgLWYgdGVzdGlkbC5jLm5ldyB0ZXN0aWRsLmMgKi5hcGktb2sKIAkk KFJNKSAtZiB4ZW5saWdodC5wYwogCSQoUk0pIC1mIHhsdXRpbC5wYworCSQoTUFLRSkgLUMgJChB Q1BJX1BBVEgpIEFDUElfQlVJTERfRElSPSQoQ1VSRElSKSBjbGVhbgogCiBkaXN0Y2xlYW46IGNs ZWFuCiAJJChSTSkgLWYgeGVubGlnaHQucGMuaW4geGx1dGlsLnBjLmluCmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF9hcmNoLmggYi90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKaW5kZXgg MjUzYTAzNy4uN2E3MGIwMSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaApAQCAtNjYsNiArNjYsOSBAQCBpbnQgbGlieGxf X2FyY2hfZG9tYWluX2NvbnN0cnVjdF9tZW1tYXAobGlieGxfX2djICpnYywKIAogI2RlZmluZSBM QVBJQ19CQVNFX0FERFJFU1MgIDB4ZmVlMDAwMDAKIAoraW50IGxpYnhsX19kb21fbG9hZF9hY3Bp KGxpYnhsX19nYyAqZ2MsCisJCQkgY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5m bywKKwkJCSBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pOwogI2VuZGlmCiAKICNlbmRpZgpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgYi90b29scy9saWJ4bC9saWJ4bF94ODYu YwppbmRleCAyYjIyMWFhLi5kMTBiMDRiIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF94 ODYuYworKysgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwpAQCAtOCwxNSArOCwxOSBAQCBpbnQg bGlieGxfX2FyY2hfZG9tYWluX3ByZXBhcmVfY29uZmlnKGxpYnhsX19nYyAqZ2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjX2RvbWFpbl9jb25maWd1cmF0aW9uX3Qg KnhjX2NvbmZpZykKIHsKIAotICAgIGlmIChkX2NvbmZpZy0+Y19pbmZvLnR5cGUgPT0gTElCWExf RE9NQUlOX1RZUEVfSFZNICYmCi0gICAgICAgIGRfY29uZmlnLT5iX2luZm8uZGV2aWNlX21vZGVs X3ZlcnNpb24gIT0KLSAgICAgICAgTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9ORSkgewot ICAgICAgICAvKiBIVk0gZG9tYWlucyB3aXRoIGEgZGV2aWNlIG1vZGVsLiAqLwotICAgICAgICB4 Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9IFhFTl9YODZfRU1VX0FMTDsKLSAgICB9IGVsc2Ug ewotICAgICAgICAvKiBQViBvciBIVk0gZG9tYWlucyB3aXRob3V0IGEgZGV2aWNlIG1vZGVsLiAq LworICAgIGlmIChkX2NvbmZpZy0+Y19pbmZvLnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZN KSB7CisgICAgICAgIGlmIChkX2NvbmZpZy0+Yl9pbmZvLmRldmljZV9tb2RlbF92ZXJzaW9uICE9 CisgICAgICAgICAgICBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSB7CisgICAgICAg ICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9IFhFTl9YODZfRU1VX0FMTDsKKyAgICAg ICAgfSBlbHNlIGlmIChsaWJ4bF9kZWZib29sX3ZhbChkX2NvbmZpZy0+Yl9pbmZvLnUuaHZtLmFw aWMpKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSFZNIGd1ZXN0cyB3aXRob3V0 IGRldmljZSBtb2RlbCBtYXkgd2FudAorICAgICAgICAgICAgICogdG8gaGF2ZSBMQVBJQyBlbXVs YXRpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9u X2ZsYWdzID0gWEVOX1g4Nl9FTVVfTEFQSUM7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCiAgICAg ICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9uX2ZsYWdzID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4g MDsKIH0KQEAgLTM2Niw3ICszNzAsMTUgQEAgaW50IGxpYnhsX19hcmNoX2RvbWFpbl9maW5hbGlz ZV9od19kZXNjcmlwdGlvbihsaWJ4bF9fZ2MgKmdjLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqaW5mbywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2Rv bV9pbWFnZSAqZG9tKQogewotICAgIHJldHVybiAwOworICAgIGludCByZXQgPSAwOworCisgICAg aWYgKChpbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkgJiYKKyAgICAgICAgKGlu Zm8tPmRldmljZV9tb2RlbF92ZXJzaW9uID09IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX05P TkUpKSB7CisgICAgICAgIGlmICggKHJldCA9IGxpYnhsX19kb21fbG9hZF9hY3BpKGdjLCBpbmZv LCBkb20pKSAhPSAwICkKKyAgICAgICAgICAgIExPR0UoRVJST1IsICJsaWJ4bF9kb21fbG9hZF9h Y3BpIGZhaWxlZCIpOworICAgIH0KKworICAgIHJldHVybiByZXQ7CiB9CiAKIC8qIFJldHVybiAw IG9uIHN1Y2Nlc3MsIEVSUk9SXyogb24gZmFpbHVyZS4gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnhsL2xpYnhsX3g4Nl9hY3BpLmMgYi90b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzgxMTYKLS0tIC9kZXYvbnVsbAorKysg Yi90b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5jCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0 aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgT3JhY2xlIGFuZC9v ciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSAi bGlieGxfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJ4bF9hcmNoLmgiCisjaW5jbHVkZSA8eGVu L2h2bS9odm1faW5mb190YWJsZS5oPgorI2luY2x1ZGUgPHhlbi9odm0vZTgyMC5oPgorI2luY2x1 ZGUgImxpYmFjcGkvbGliYWNwaS5oIgorCisjaW5jbHVkZSA8eGNfZG9tLmg+CisKKyAvKiBOdW1i ZXIgb2YgcGFnZXMgaG9sZGluZyBBQ1BJIHRhYmxlcyAqLworI2RlZmluZSBOVU1fQUNQSV9QQUdF UyAxNgorLyogU3RvcmUgUlNEUCBpbiB0aGUgbGFzdCA2NCBieXRlcyBvZiBCSU9TIFJPIG1lbW9y eSAqLworI2RlZmluZSBSU0RQX0FERFJFU1MgKDB4MTAwMDAwIC0gNjQpCisjZGVmaW5lIEFDUElf SU5GT19QSFlTSUNBTF9BRERSRVNTIDB4ZmMwMDAwMDAKKworc3RydWN0IGxpYnhsX2FjcGlfY3R4 dCB7CisgICAgc3RydWN0IGFjcGlfY3R4dCBjOworCisgICAgdW5zaWduZWQgaW50IHBhZ2Vfc2l6 ZTsKKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdDsKKworICAgIC8qIE1lbW9yeSBhbGxvY2F0 b3IgKi8KKyAgICB1bnNpZ25lZCBsb25nIGFsbG9jX2Jhc2VfcGFkZHI7CisgICAgdW5zaWduZWQg bG9uZyBhbGxvY19iYXNlX3ZhZGRyOworICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NfY3VycnA7Cisg ICAgdW5zaWduZWQgbG9uZyBhbGxvY19lbmQ7Cit9OworCitleHRlcm4gY29uc3QgdW5zaWduZWQg Y2hhciBkc2R0X3B2aFtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBkc2R0X3B2aF9sZW47 CisKKy8qIEFzc3VtZXMgY29udGlndW91cyBwaHlzaWNhbCBzcGFjZSAqLworc3RhdGljIHVuc2ln bmVkIGxvbmcgdmlydF90b19waHlzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHZvaWQgKnYpCit7 CisgICAgc3RydWN0IGxpYnhsX2FjcGlfY3R4dCAqbGlieGxfY3R4dCA9CisgICAgICAgIENPTlRB SU5FUl9PRihjdHh0LCBzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0LCBjKTsKKworICAgIHJldHVybiAo KCh1bnNpZ25lZCBsb25nKXYgLSBsaWJ4bF9jdHh0LT5hbGxvY19iYXNlX3ZhZGRyKSArCisgICAg ICAgICAgICBsaWJ4bF9jdHh0LT5hbGxvY19iYXNlX3BhZGRyKTsKK30KKworc3RhdGljIHZvaWQg Km1lbV9hbGxvYyhzdHJ1Y3QgYWNwaV9jdHh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKK3sKKyAgICBzdHJ1Y3QgbGlieGxfYWNw aV9jdHh0ICpsaWJ4bF9jdHh0ID0KKyAgICAgICAgQ09OVEFJTkVSX09GKGN0eHQsIHN0cnVjdCBs aWJ4bF9hY3BpX2N0eHQsIGMpOworICAgIHVuc2lnbmVkIGxvbmcgcywgZTsKKworICAgIC8qIEFs aWduIHRvIGF0IGxlYXN0IDE2IGJ5dGVzLiAqLworICAgIGlmIChhbGlnbiA8IDE2KQorICAgICAg ICBhbGlnbiA9IDE2OworCisgICAgcyA9IChsaWJ4bF9jdHh0LT5hbGxvY19jdXJycCArIGFsaWdu KSAmIH4oKHVuc2lnbmVkIGxvbmcpYWxpZ24gLSAxKTsKKyAgICBlID0gcyArIHNpemUgLSAxOwor CisgICAgLyogVE9ETzogUmVhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICBpZiAoKGUgPCBzKSB8fCAo ZSA+PSBsaWJ4bF9jdHh0LT5hbGxvY19lbmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg IHdoaWxlIChsaWJ4bF9jdHh0LT5hbGxvY19jdXJycCA+PiBsaWJ4bF9jdHh0LT5wYWdlX3NoaWZ0 ICE9IAorICAgICAgICAgICBlID4+IGxpYnhsX2N0eHQtPnBhZ2Vfc2hpZnQpCisgICAgICAgIGxp YnhsX2N0eHQtPmFsbG9jX2N1cnJwICs9IGxpYnhsX2N0eHQtPnBhZ2Vfc2l6ZTsKKworICAgIGxp YnhsX2N0eHQtPmFsbG9jX2N1cnJwID0gZTsKKworICAgIHJldHVybiAodm9pZCAqKXM7Cit9CisK K3N0YXRpYyB2b2lkIGFjcGlfbWVtX2ZyZWUoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdiwgdWludDMyX3Qgc2l6ZSkKK3sKK30KKworc3Rh dGljIHVpbnQ4X3QgYWNwaV9sYXBpY19pZCh1bnNpZ25lZCBjcHUpCit7CisgICAgcmV0dXJuIGNw dSAqIDI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9hY3BpX2NvbmZpZyhsaWJ4bF9fZ2MgKmdjLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8g KmJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWNwaV9jb25maWcg KmNvbmZpZykKK3sKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCA9IGRvbS0+eGNoOworICAgIHVpbnQz Ml90IGRvbWlkID0gZG9tLT5ndWVzdF9kb21pZDsKKyAgICB4Y19kb21pbmZvX3QgaW5mbzsKKyAg ICBzdHJ1Y3QgaHZtX2luZm9fdGFibGUgKmh2bWluZm87CisgICAgaW50IGksIHJjOworCisgICAg Y29uZmlnLT5kc2R0X2FueWNwdSA9IGNvbmZpZy0+ZHNkdF8xNWNwdSA9IGRzZHRfcHZoOworICAg IGNvbmZpZy0+ZHNkdF9hbnljcHVfbGVuID0gY29uZmlnLT5kc2R0XzE1Y3B1X2xlbiA9IGRzZHRf cHZoX2xlbjsKKworICAgIHJjID0geGNfZG9tYWluX2dldGluZm8oeGNoLCBkb21pZCwgMSwgJmlu Zm8pOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiJXM6IGdldGRvbWFp bmluZm8gZmFpbGVkIChyYz0lZCkiLCBfX0ZVTkNUSU9OX18sIHJjKTsKKyAgICAgICAgcmV0dXJu IHJjOworICAgIH0KKworICAgIGh2bWluZm8gPSBsaWJ4bF9femFsbG9jKGdjLCBzaXplb2YoKmh2 bWluZm8pKTsKKworICAgIGh2bWluZm8tPmFwaWNfbW9kZSA9IGxpYnhsX2RlZmJvb2xfdmFsKGJf aW5mby0+dS5odm0uYXBpYyk7CisKKyAgICBpZiAoZG9tLT5ucl92bm9kZXMpIHsKKyAgICAgICAg dW5zaWduZWQgaW50ICp2Y3B1X3RvX3Zub2RlLCAqdmRpc3RhbmNlOworICAgICAgICBzdHJ1Y3Qg eGVuX3ZtZW1yYW5nZSAqdm1lbXJhbmdlOworICAgICAgICBzdHJ1Y3QgYWNwaV9udW1hICpudW1h ID0gJmNvbmZpZy0+bnVtYTsKKworICAgICAgICByYyA9IHhjX2RvbWFpbl9nZXR2bnVtYSh4Y2gs IGRvbWlkLCAmbnVtYS0+bnJfdm5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbnVtYS0+bnJfdm1lbXJhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jmh2bWluZm8tPm5yX3ZjcHVzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKHJjKSB7 CisgICAgICAgICAgICBMT0coRVJST1IsICIlczogeGNfZG9tYWluX2dldHZudW1hIGZhaWxlZCAo cmM9JWQpIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHJjKTsKKyAgICAgICAgICAg IHJldHVybiByYzsKKyAgICAgICAgfQorCisgICAgICAgIHZtZW1yYW5nZSA9IGxpYnhsX196YWxs b2MoZ2MsIGRvbS0+bnJfdm1lbXJhbmdlcyAqIHNpemVvZigqdm1lbXJhbmdlKSk7CisgICAgICAg IHZkaXN0YW5jZSA9IGxpYnhsX196YWxsb2MoZ2MsIGRvbS0+bnJfdm5vZGVzICogc2l6ZW9mKCp2 ZGlzdGFuY2UpKTsKKyAgICAgICAgdmNwdV90b192bm9kZSA9IGxpYnhsX196YWxsb2MoZ2MsIGh2 bWluZm8tPm5yX3ZjcHVzICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKCp2Y3B1X3RvX3Zub2RlKSk7CisgICAgICAgIHJjID0geGNfZG9tYWluX2dldHZudW1h KHhjaCwgZG9taWQsICZudW1hLT5ucl92bm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZudW1hLT5ucl92bWVtcmFuZ2VzLCAmaHZtaW5mby0+bnJfdmNwdXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtZW1yYW5nZSwgdmRpc3RhbmNlLCB2Y3B1X3RvX3Zu b2RlKTsKKwlpZiAocmMpIHsKKyAgICAgICAgICAgIExPRyhFUlJPUiwgIiVzOiB4Y19kb21haW5f Z2V0dm51bWEgZmFpbGVkIChyYz0lZCkiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywg cmMpOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgICAgIG51bWEtPnZt ZW1yYW5nZSA9IHZtZW1yYW5nZTsKKyAgICAgICAgbnVtYS0+dmRpc3RhbmNlID0gdmRpc3RhbmNl OworICAgICAgICBudW1hLT52Y3B1X3RvX3Zub2RlID0gdmNwdV90b192bm9kZTsKKyAgICB9Cisg ICAgZWxzZQorICAgICAgICBodm1pbmZvLT5ucl92Y3B1cyA9IGluZm8ubWF4X3ZjcHVfaWQgKyAx OworCisgICAgZm9yIChpID0gMDsgaSA8IGh2bWluZm8tPm5yX3ZjcHVzOyBpKyspCisgICAgICAg IGh2bWluZm8tPnZjcHVfb25saW5lW2kgLyA4XSB8PSAxIDw8IChpICYgNyk7CisKKyAgICBjb25m aWctPmh2bWluZm8gPSBodm1pbmZvOworCisgICAgY29uZmlnLT5sYXBpY19iYXNlX2FkZHJlc3Mg PSBMQVBJQ19CQVNFX0FERFJFU1M7CisgICAgY29uZmlnLT5sYXBpY19pZCA9IGFjcGlfbGFwaWNf aWQ7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGxpYnhsX19kb21fbG9hZF9hY3BpKGxpYnhs X19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfZG9tYWluX2J1 aWxkX2luZm8gKmJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9t X2ltYWdlICpkb20pCit7CisgICAgc3RydWN0IGFjcGlfY29uZmlnIGNvbmZpZyA9IHswfTsKKyAg ICBzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0IGxpYnhsX2N0eHQ7CisgICAgaW50IHJjLCBhY3BpX3Bh Z2VzX251bTsKKyAgICB2b2lkICphY3BpX3BhZ2VzOworICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9t YXNrOworCisgICAgaWYgKChiX2luZm8tPnR5cGUgIT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSB8 fAorICAgICAgICAoYl9pbmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lvbiAhPSBMSUJYTF9ERVZJQ0Vf TU9ERUxfVkVSU0lPTl9OT05FKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsaWJ4bF9jdHh0 LnBhZ2Vfc2l6ZSA9IFhDX0RPTV9QQUdFX1NJWkUoZG9tKTsKKyAgICBsaWJ4bF9jdHh0LnBhZ2Vf c2hpZnQgPSAgWENfRE9NX1BBR0VfU0hJRlQoZG9tKTsKKyAgICBwYWdlX21hc2sgPSAoMVVMIDw8 IGxpYnhsX2N0eHQucGFnZV9zaGlmdCkgLSAxOworCisgICAgbGlieGxfY3R4dC5jLm1lbV9vcHMu YWxsb2MgPSBtZW1fYWxsb2M7CisgICAgbGlieGxfY3R4dC5jLm1lbV9vcHMudjJwID0gdmlydF90 b19waHlzOworICAgIGxpYnhsX2N0eHQuYy5tZW1fb3BzLmZyZWUgPSBhY3BpX21lbV9mcmVlOwor CisgICAgcmMgPSBpbml0X2FjcGlfY29uZmlnKGdjLCBkb20sIGJfaW5mbywgJmNvbmZpZyk7Cisg ICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJPUiwgIiVzOiBpbml0X2FjcGlfY29uZmlnIGZh aWxlZCAocmM9JWQpIiwgX19GVU5DVElPTl9fLCByYyk7CisgICAgICAgIHJldHVybiByYzsKKyAg ICB9CisKKyAgICBjb25maWcucnNkcCA9ICh1bnNpZ25lZCBsb25nKWxpYnhsX19tYWxsb2MoZ2Ms IGxpYnhsX2N0eHQucGFnZV9zaXplKTsKKyAgICBjb25maWcuaW5mb3AgPSAodW5zaWduZWQgbG9u ZylsaWJ4bF9fbWFsbG9jKGdjLCBsaWJ4bF9jdHh0LnBhZ2Vfc2l6ZSk7CisgICAgLyogUGFnZXMg dG8gaG9sZCBBQ1BJIHRhYmxlcyAqLworICAgIGFjcGlfcGFnZXMgPSAgbGlieGxfX21hbGxvYyhn YywgKE5VTV9BQ1BJX1BBR0VTICsgMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9jdHh0LnBhZ2Vfc2l6ZSk7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBhbGxvY2F0 b3IgbWVtb3J5LgorICAgICAqIFN0YXJ0IG5leHQgdG8gYWNwaV9pbmZvIHBhZ2UgdG8gYXZvaWQg ZnJhY3R1cmluZyBlODIwLgorICAgICAqLworICAgIGxpYnhsX2N0eHQuYWxsb2NfYmFzZV9wYWRk ciA9IEFDUElfSU5GT19QSFlTSUNBTF9BRERSRVNTICsKKyAgICAgICAgbGlieGxfY3R4dC5wYWdl X3NpemU7CisgICAgbGlieGxfY3R4dC5hbGxvY19iYXNlX3ZhZGRyID0gbGlieGxfY3R4dC5hbGxv Y19jdXJycCA9CisgICAgICAgICh1bnNpZ25lZCBsb25nKWFjcGlfcGFnZXM7CisgICAgbGlieGxf Y3R4dC5hbGxvY19lbmQgPSAodW5zaWduZWQgbG9uZylhY3BpX3BhZ2VzICsKKyAgICAgICAgKE5V TV9BQ1BJX1BBR0VTICogbGlieGxfY3R4dC5wYWdlX3NpemUpOworCisgICAgLyogQnVpbGQgdGhl IHRhYmxlcy4gKi8KKyAgICByYyA9IGFjcGlfYnVpbGRfdGFibGVzKCZsaWJ4bF9jdHh0LmMsICZj b25maWcpOworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1IsICIlczogYWNwaV9idWls ZF90YWJsZXMgZmFpbGVkIHdpdGggJWQiLAorICAgICAgICAgICAgX19GVU5DVElPTl9fLCByYyk7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBob3cgbWFueSBw YWdlcyBhcmUgbmVlZGVkIGZvciB0aGUgdGFibGVzLiAqLworICAgIGFjcGlfcGFnZXNfbnVtID0K KyAgICAgICAgKChsaWJ4bF9jdHh0LmFsbG9jX2N1cnJwIC0gKHVuc2lnbmVkIGxvbmcpYWNwaV9w YWdlcykKKyAgICAgICAgID4+IGxpYnhsX2N0eHQucGFnZV9zaGlmdCkgKworICAgICAgICAoKGxp YnhsX2N0eHQuYWxsb2NfY3VycnAgJiBwYWdlX21hc2spID8gMSA6IDApOworCisgICAgZG9tLT5h Y3BpX21vZHVsZXNbMF0uZGF0YSA9ICh2b2lkICopY29uZmlnLnJzZHA7CisgICAgZG9tLT5hY3Bp X21vZHVsZXNbMF0ubGVuZ3RoID0gNjQ7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMF0uZ3Vlc3Rf YWRkcl9vdXQgPSBSU0RQX0FERFJFU1M7CisKKyAgICBkb20tPmFjcGlfbW9kdWxlc1sxXS5kYXRh ID0gKHZvaWQgKiljb25maWcuaW5mb3A7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMV0ubGVuZ3Ro ID0gNDA5NjsKKyAgICBkb20tPmFjcGlfbW9kdWxlc1sxXS5ndWVzdF9hZGRyX291dCA9IEFDUElf SU5GT19QSFlTSUNBTF9BRERSRVNTOworCisgICAgZG9tLT5hY3BpX21vZHVsZXNbMl0uZGF0YSA9 IGFjcGlfcGFnZXM7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMl0ubGVuZ3RoID0gYWNwaV9wYWdl c19udW0gIDw8IGxpYnhsX2N0eHQucGFnZV9zaGlmdDsKKyAgICBkb20tPmFjcGlfbW9kdWxlc1sy XS5ndWVzdF9hZGRyX291dCA9IEFDUElfSU5GT19QSFlTSUNBTF9BRERSRVNTICsKKyAgICAgICAg bGlieGxfY3R4dC5wYWdlX3NpemU7CisKK291dDoKKworICAgIHJldHVybiByYzsKKworfQorLyoK KyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cisg KiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvbGlieGxfeDg2X2FjcGkuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyMmRkMAotLS0gL2Rldi9udWxsCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2Vw dGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQv b3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBM SUJYTF9YODZfQUNQSV9ICisjZGVmaW5lIExJQlhMX1g4Nl9BQ1BJX0gKKworI2luY2x1ZGUgImxp YnhsX2ludGVybmFsLmgiCisKKyNkZWZpbmUgQVNTRVJUKHgpIGFzc2VydCh4KQorCitzdGF0aWMg aW5saW5lIGludCB0ZXN0X2JpdCh1bnNpZ25lZCBpbnQgYiwgY29uc3Qgdm9pZCAqcCkKK3sKKyAg ICByZXR1cm4gISEoKCh1aW50OF90ICopcClbYj4+M10gJiAoMXU8PChiJjcpKSk7Cit9CisKKyNl bmRpZiAvKiBMSUJYTF9YXzg2X0FDUElfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgor ICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5p bAorICogRW5kOgorICovCi0tIAoxLjguMy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==