Date: Fri, 6 Dec 2013 14:37:21 +0000 From: "Desai, Kashyap" <Kashyap.Desai@lsi.com> To: "freebsd-scsi@freebsd.org" <freebsd-scsi@freebsd.org> Cc: "scottl@netflix.com" <scottl@netflix.com>, "Radford, Adam" <Adam.Radford@lsi.com>, "Kenneth D. Merry" <ken@kdm.org>, "sean_bruno@yahoo.com" <sean_bruno@yahoo.com>, "Mankani, Krishnaraddi" <Krishnaraddi.Mankani@lsi.com>, "dwhite@ixsystems.com" <dwhite@ixsystems.com>, "Maloy, Joe" <Joe.Maloy@lsi.com>, "jpaetzel@freebsd.org" <jpaetzel@freebsd.org>, Doug Ambrisko <ambrisko@cisco.com>, "McConnell, Stephen" <Stephen.McConnell@lsi.com> Subject: LSI - MR-Fusion controller driver <mrsas> patch and man page Message-ID: <08ba2a262fba45f687cdd3225f325110@BN1PR07MB247.namprd07.prod.outlook.com>
next in thread | raw e-mail | index | archive | help
--_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Please consider attached patch for FreeBSD upstream check-in. Please find attached patch for <mrsas> driver for LSI's MegaRaid Controller= s. This driver supports Thunderbolt onwards Device IDs of MR controllers. Currently it supports 0x005B and 0x005D Device IDs. NOTE : This driver will not eliminate or by pass any functionality of <mfi>= driver which already support above to Device IDs to keep existing user exp= erience unchanged. =20 <mfi> Driver will be always given priority over <mrsas> driver and only if = customer/user wants to use/migrate from <mfi> to <mrsas>, it will hook up i= nto kernel via device.hint rules. (Attached is mrsas man page for more info= .) LSI will continue to update <mrsas> driver in future in timely bases. We ha= ve another set of patch in pipeline to be submitted for <mrsas>, but need f= irst go ahead for attached patch and later we will continue to keep <mrsas>= up-to-date (In sync with LSI released driver which is available at lsi's e= xternal site) Apply patch with "patch -p0 < patchname.patch" from head directory.=20 -- Few notes for user-- LSI recommends using fusion_force bit In hint settings at start of the day,= if they want to use <mrsas>. ( <mfi> will be a default choice for MR-Fusio= n HBA), if will be changed only with fusion_force hint settings. (See mrsas= man page) Changing any default behavior is well tested for most of the con= dition. Switching from <mfi> to <mrsas> for MR-Fusion options is designed to allow = user as one time choice, though multiple time switch from <mfi> to <mrsas> = is possible, it is not recommended. So, user needs to decide from start of = the day, which driver they want to use for MR-Fusion card. -- Implementation details -- To support this feature, we have modify <mfi> code to change default return= type from probe. Currently <mfi> driver return "BUS_PROBE_DEFAULT". <mfi> = driver has been be changed to return "BUS_PROBE_LOW_PRIORITY" if fusion_for= ce hint from device.hints is set. Please notice, above mentioned implementation in <mfi> driver is only appli= cable in case of MR-Fusion controller detection. For any other controllers= , supported by <mfi> driver, the behavior of probe return will remain same = as before. -- High level feature list of <mrsas> -- 1. Supports Fast Path feature of LSI controllers. 2. Supports 4K sector Drives. 3. CAM layer based interface. All VDs will be attached to CAM layer (Expect= ed storage will be visible in "camcontroll") 4. Complete support of Online Controller Reset. (OCR) 5. OCR on Fimrware fault and IO timeout case. 6. Work well with <storcli> management application which is generic applica= tion provided by LSI for all other Operating system. 7. Supporst DIF enabled VDs (Same support as provided in Linux and other OS= es in FreeBSD) 8. Fast Path Load balance support. - In summary, this driver is in part with Linux based MR drivers and all ot= her features will be available to <mrsas> as planned activity from LSI This code is well tested by LSI Q/A team on 32 bit and 64 bit FreeBSD Relea= sed OSes. Thanks, Kashyap --_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_ Content-Type: application/octet-stream; name="upstream_mrsas_fusion_force.patch" Content-Description: upstream_mrsas_fusion_force.patch Content-Disposition: attachment; filename="upstream_mrsas_fusion_force.patch"; size=315504; creation-date="Fri, 06 Dec 2013 14:34:46 GMT"; modification-date="Fri, 06 Dec 2013 19:46:04 GMT" Content-Transfer-Encoding: base64 SW5kZXg6IHN5cy9tb2R1bGVzL21yc2FzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9tb2R1 bGVzL21yc2FzL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgc3lzL21vZHVsZXMvbXJzYXMvTWFr ZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorIyBNYWtlZmlsZSBmb3IgbXJz YXMgZHJpdmVyCisKK0tNT0Q9bXJzYXMKKy5QQVRIOiAkey5DVVJESVJ9Ly4uLy4uL2Rldi8ke0tN T0R9CitTUkNTPW1yc2FzLmMgbXJzYXNfY2FtLmMgbXJzYXNfaW9jdGwuYyBtcnNhc19mcC5jCitT UkNTKz0gIGRldmljZV9pZi5oIGJ1c19pZi5oIHBjaV9pZi5oIG9wdF9jYW0uaCBvcHRfc2NzaS5o CisKKyNDRkxBR1MrPSAtTVJTQVNfREVCVUcKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KK0NGTEFH Uys9IC1mZ251ODktaW5saW5lCisKK2NsZWFuX2NzY29wZToKKwlybSAtZiBjc2NvcGUqCisKK2Nz Y29wZToJY2xlYW5fY3Njb3BlCisJL3Vzci9sb2NhbC9iaW4vY3Njb3BlIC1iICouW2NoXQorCitj bGVhbmFsbDoJY2xlYW4gY2xlYW5fY3Njb3BlCisJcm0gLWYgJ0AnIG1hY2hpbmUKKwpJbmRleDog c3lzL21vZHVsZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21vZHVsZXMvTWFrZWZpbGUJ KHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9tb2R1bGVzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp CkBAIC0yMDIsNiArMjAyLDcgQEAKIAltZCBcCiAJbWVtIFwKIAltZmkgXAorCW1yc2FzIFwKIAlt aWkgXAogCW1seCBcCiAJJHtfbWx4NH0gXApJbmRleDogc3lzL2FtZDY0L2NvbmYvR0VORVJJQwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBzeXMvYW1kNjQvY29uZi9HRU5FUklDCShyZXZpc2lvbiAyNDk5MjApCisr KyBzeXMvYW1kNjQvY29uZi9HRU5FUklDCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDcg QEAKIGRldmljZQkJYWFjcAkJIyBTQ1NJIHBhc3N0aHJvdWdoIGZvciBhYWMgKHJlcXVpcmVzIENB TSkKIGRldmljZQkJaWRhCQkjIENvbXBhcSBTbWFydCBSQUlECiBkZXZpY2UJCW1maQkJIyBMU0kg TWVnYVJBSUQgU0FTCitkZXZpY2UJCW1yc2FzCSMgTFNJIE1lZ2FSQUlEIFNBUyA2R2IvcyAxMkdi L3MKIGRldmljZQkJbWx4CQkjIE15bGV4IERBQzk2MCBmYW1pbHkKICNYWFggcG9pbnRlci9pbnQg d2FybmluZ3MKICNkZXZpY2UJCXBzdAkJIyBQcm9taXNlIFN1cGVydHJhayBTWDYwMDAKSW5kZXg6 IHN5cy9pMzg2L2NvbmYvR0VORVJJQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvaTM4Ni9jb25mL0dFTkVS SUMgICAgICAgKHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9pMzg2L2NvbmYvR0VORVJJQyAgICAg ICAod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBACiBkZXZpY2UJCWFhY3AJCSMgU0NT SSBwYXNzdGhyb3VnaCBmb3IgYWFjIChyZXF1aXJlcyBDQU0pCiBkZXZpY2UJCWlkYQkJIyBDb21w YXEgU21hcnQgUkFJRAogZGV2aWNlCQltZmkJCSMgTFNJIE1lZ2FSQUlEIFNBUworZGV2aWNlCQlt cnNhcwkJIyBMU0kgTWVnYVJBSUQgU0FTIDZHYi9zIDEyR2IvcwogZGV2aWNlCQltbHgJCSMgTXls ZXggREFDOTYwIGZhbWlseQogZGV2aWNlCQlwc3QJCSMgUHJvbWlzZSBTdXBlcnRyYWsgU1g2MDAw CiBkZXZpY2UJCXR3ZQkJIyAzd2FyZSBBVEEgUkFJRApJbmRleDogc3lzL2NvbmYvZmlsZXMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL2NvbmYvZmlsZXMJKHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9jb25m L2ZpbGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ4LDYgKzE2NDgsMTAgQEAKIGRldi9tZmkvbWZp X3Rib2x0LmMJCW9wdGlvbmFsIG1maQogZGV2L21maS9tZmlfbGludXguYwkJb3B0aW9uYWwgbWZp IGNvbXBhdF9saW51eAogZGV2L21maS9tZmlfY2FtLmMJCW9wdGlvbmFsIG1maXAgc2NidXMKK2Rl di9tcnNhcy9tcnNhcy5jCQlvcHRpb25hbCBtcnNhcworZGV2L21yc2FzL21yc2FzX2NhbS5jCW9w dGlvbmFsIG1yc2FzCitkZXYvbXJzYXMvbXJzYXNfaW9jdGwuYwlvcHRpb25hbCBtcnNhcworZGV2 L21yc2FzL21yc2FzX2ZwLmMJb3B0aW9uYWwgbXJzYXMKIGRldi9taWkvYWNwaHkuYwkJCW9wdGlv bmFsIG1paWJ1cyB8IGFjcGh5CiBkZXYvbWlpL2FtcGh5LmMJCQlvcHRpb25hbCBtaWlidXMgfCBh bXBoeQogZGV2L21paS9hdHBoeS5jCQkJb3B0aW9uYWwgbWlpYnVzIHwgYXRwaHkKSW5kZXg6IHN5 cy9kZXYvbXJzYXMvbXJzYXNfY2FtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9tcnNhcy9tcnNh c19jYW0uYwkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvbXJzYXMvbXJzYXNfY2FtLmMJKHdvcmtp bmcgY29weSkKQEAgLTAsMCArMSwxMTA4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBM U0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95 CisgKiBNb2RpZmllZCBieSBEZXNhaSBLYXNoeWFwIChrYXNoeWFwLmRlc2FpQGxzaS5jb20pCisg KiBNb2RpZmllZCBieSBTYXhlbmEgU3VtaXQgKHN1bWl0LnNheGVuYUBsc2kuY29tKQorICogU3Vw cG9ydDogZnJlZWJzZHJhaWRAbHNpLmNvbQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0 aGVyIHRoZSBuYW1lIG9mIHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cwor ICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisg KiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyovCisKKyNpbmNsdWRlICJk ZXYvbXJzYXMvbXJzYXMuaCIgCisKKyNpbmNsdWRlIDxjYW0vY2FtLmg+CisjaW5jbHVkZSA8Y2Ft L2NhbV9jY2IuaD4KKyNpbmNsdWRlIDxjYW0vY2FtX3NpbS5oPgorI2luY2x1ZGUgPGNhbS9jYW1f eHB0X3NpbS5oPgorI2luY2x1ZGUgPGNhbS9jYW1fZGVidWcuaD4KKyNpbmNsdWRlIDxjYW0vY2Ft X3BlcmlwaC5oPgorI2luY2x1ZGUgPGNhbS9jYW1feHB0X3BlcmlwaC5oPgorCisjaW5jbHVkZSA8 Y2FtL3Njc2kvc2NzaV9hbGwuaD4KKyNpbmNsdWRlIDxjYW0vc2NzaS9zY3NpX21lc3NhZ2UuaD4K KyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlw ZXMKKyAqLworaW50IG1yc2FzX2NhbV9hdHRhY2goc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cisv L2ludCBtcnNhc19sZGlvX2lucSh1bmlvbiBjY2IgKmNjYik7IAoraW50IG1yc2FzX2xkaW9faW5x KHN0cnVjdCBjYW1fc2ltICpzaW0sIHVuaW9uIGNjYiAqY2NiKTsgCitpbnQgbXJzYXNfYnVzX3Nj YW4oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNfYnVzX3NjYW5fc2ltKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpzaW0pOworaW50IG1yc2FzX21hcF9y ZXF1ZXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQp OworaW50IG1yc2FzX2J1aWxkX2xkaW8oc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1y c2FzX21wdF9jbWQgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IpOwor aW50IG1yc2FzX2J1aWxkX2RjZGIoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2Fz X21wdF9jbWQgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IsIHN0cnVj dCBjYW1fc2ltICpzaW0pOworaW50IG1yc2FzX3NldHVwX2lvKHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgIHVuaW9u IGNjYiAqY2NiLCB1X2ludDMyX3QgZGV2aWNlX2lkLAorICAgICAgICAgICAgICAgICAgICBNUlNB U19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCk7Cit2b2lkIG1yc2FzX3hwdF9mcmVl emUoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX3hwdF9yZWxlYXNlKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc19jYW1fZGV0YWNoKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOwordm9pZCBtcnNhc19yZWxlYXNlX21wdF9jbWQoc3RydWN0IG1yc2FzX21wdF9j bWQgKmNtZCk7IAordm9pZCBtcnNhc191bm1hcF9yZXF1ZXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQpOwordm9pZCBtcnNhc19jbWRfZG9uZShzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kKTsKK3ZvaWQgbXJz YXNfZmlyZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdV9pbnQzMl90IHJlcV9kZXNjX2xv LAorICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcmVxX2Rlc2NfaGkpOwordm9pZCBtcnNh c19zZXRfcGRfbGJhKE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNUICppb19yZXF1ZXN0LCB1X2lu dDhfdCBjZGJfbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IElPX1JFUVVFU1RfSU5G TyAqaW9faW5mbywgdW5pb24gY2NiICpjY2IsIAorICAgICAgICAgICAgICAgICAgICBNUl9GV19S QUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVfaW50MzJfdCByZWZfdGFnLAorICAgICAgICAg ICAgICAgICAgICB1X2ludDMyX3QgbGRfYmxvY2tfc2l6ZSk7CitzdGF0aWMgdm9pZCBtcnNhc19m cmVlemVfc2ltcShzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kLCBzdHJ1Y3QgY2FtX3NpbSAqc2lt KTsKK3N0YXRpYyB2b2lkIG1yc2FzX3BvbGwoc3RydWN0IGNhbV9zaW0gKnNpbSk7CitzdGF0aWMg dm9pZCBtcnNhc19hY3Rpb24oc3RydWN0IGNhbV9zaW0gKnNpbSwgdW5pb24gY2NiICpjY2IpOwor c3RhdGljIHZvaWQgbXJzYXNfc2NzaWlvX3RpbWVvdXQodm9pZCAqZGF0YSk7CitzdGF0aWMgdm9p ZCBtcnNhc19kYXRhX2xvYWRfY2Iodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywK KyAgICAgICAgICAgICAgICAgICAgaW50IG5zZWcsIGludCBlcnJvcik7CitzdGF0aWMgaW50MzJf dCBtcnNhc19zdGFydGlvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpz aW0sIAorICAgICAgICAgICAgICAgICAgICB1bmlvbiBjY2IgKmNjYik7CitzdHJ1Y3QgbXJzYXNf bXB0X2NtZCAqIG1yc2FzX2dldF9tcHRfY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOyAKK01S U0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqbXJzYXNfZ2V0X3JlcXVlc3RfZGVzYyhzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IGluZGV4 KTsKKworZXh0ZXJuIHVfaW50MTZfdCBNUl9UYXJnZXRJZFRvTGRHZXQodV9pbnQzMl90IGxkVGd0 SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK2V4dGVybiB1X2ludDMyX3QgTVJfTGRCbG9j a1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwLAorICAg IHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfaXNyKHZvaWQgKmFy Zyk7CitleHRlcm4gdm9pZCBtcnNhc19hZW5faGFuZGxlcihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj KTsKK2V4dGVybiB1X2ludDhfdCBNUl9CdWlsZFJhaWRDb250ZXh0KHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsIAorICAgICAgICBzdHJ1Y3QgSU9fUkVRVUVTVF9JTkZPICppb19pbmZvLFJBSURfQ09O VEVYVCAqcFJBSURfQ29udGV4dCwgCisgICAgICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsK K2V4dGVybiB1X2ludDE2X3QgTVJfTGRTcGFuQXJyYXlHZXQodV9pbnQzMl90IGxkLCB1X2ludDMy X3Qgc3BhbiwgCisgICAgICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsgCitleHRlcm4gdV9p bnQxNl90IG1yc2FzX2dldF91cGRhdGVkX2Rldl9oYW5kbGUoUExEX0xPQURfQkFMQU5DRV9JTkZP IGxiSW5mbywKKyAgICAgICAgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbyk7CitleHRl cm4gdV9pbnQ4X3QgbWVnYXNhc19nZXRfYmVzdF9hcm0oUExEX0xPQURfQkFMQU5DRV9JTkZPIGxi SW5mbywgdV9pbnQ4X3QgYXJtLAorICAgICAgIHVfaW50NjRfdCBibG9jaywgdV9pbnQzMl90IGNv dW50KTsKKworCisvKioKKyAqIG1yc2FzX2NhbV9hdHRhY2g6ICAgICAgICBNYWluIGVudHJ5IHRv IENBTSBzdWJzeXN0ZW0gCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0 YW5jZSBzb2Z0IHN0YXRlIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbXJz YXNfYXR0YWNoKCkgZHVyaW5nIGluaXRpYWxpemF0aW9uCisgKiB0byBwZXJmb3JtIFNJTSBhbGxv Y2F0aW9ucyBhbmQgWFBUIGJ1cyByZWdpc3RyYXRpb24uICBJZiB0aGUga2VybmVsIAorICogdmVy c2lvbiBpcyA3LjQgb3IgZWFybGllciwgaXQgd291bGQgYWxzbyBpbml0aWF0ZSBhIGJ1cyBzY2Fu LgorICovCitpbnQgbXJzYXNfY2FtX2F0dGFjaChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQorewor ICAgIHN0cnVjdCBjYW1fZGV2cSAqZGV2cTsKKyAgICBpbnQgbXJzYXNfY2FtX2RlcHRoOworCisg ICAgbXJzYXNfY2FtX2RlcHRoID0gc2MtPm1heF9md19jbWRzIC0gTVJTQVNfSU5URVJOQUxfQ01E UzsKKyAgICAKKyAgICBpZiAoKGRldnEgPSBjYW1fc2ltcV9hbGxvYyhtcnNhc19jYW1fZGVwdGgp KSA9PSBOVUxMKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5v dCBhbGxvY2F0ZSBTSU0gcXVldWVcbiIpOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9 CisKKworICAgIC8qIAorICAgICAqIENyZWF0ZSBTSU0gZm9yIGJ1cyAwIGFuZCByZWdpc3Rlciwg YWxzbyBjcmVhdGUgcGF0aCAKKyAgICAgKi8KKyAgICBzYy0+c2ltXzAgPSBjYW1fc2ltX2FsbG9j KG1yc2FzX2FjdGlvbiwgbXJzYXNfcG9sbCwgIm1yc2FzIiwgc2MsCisgICAgICAgIGRldmljZV9n ZXRfdW5pdChzYy0+bXJzYXNfZGV2KSwgJnNjLT5zaW1fbG9jaywgbXJzYXNfY2FtX2RlcHRoLAor ICAgICAgICBtcnNhc19jYW1fZGVwdGgsIGRldnEpOworICAgIGlmIChzYy0+c2ltXzAgPT0gTlVM TCl7CisgICAgICAgIGNhbV9zaW1xX2ZyZWUoZGV2cSk7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCByZWdpc3RlciBTSU1cbiIpOworICAgICAgICByZXR1cm4o RU5YSU8pOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIHRhc2txdWV1ZSBmb3IgRXZlbnQgSGFu ZGxpbmcgKi8KKyAgICBUQVNLX0lOSVQoJnNjLT5ldl90YXNrLCAwLCAodm9pZCAqKW1yc2FzX2Fl bl9oYW5kbGVyLCBzYyk7CisgICAgc2MtPmV2X3RxID0gdGFza3F1ZXVlX2NyZWF0ZSgibXJzYXNf dGFza3EiLCBNX05PV0FJVCB8IE1fWkVSTywKKyAgICAgICAgdGFza3F1ZXVlX3RocmVhZF9lbnF1 ZXVlLCAmc2MtPmV2X3RxKTsKKworICAgIC8qIFJ1biB0aGUgdGFzayBxdWV1ZSB3aXRoIGxvd2Vz dCBwcmlvcml0eSAqLworICAgIHRhc2txdWV1ZV9zdGFydF90aHJlYWRzKCZzYy0+ZXZfdHEsIDEs IDI1NSwgIiVzIHRhc2txIiwKKyAgICAgICAgZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+bXJzYXNf ZGV2KSk7CisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7CisgICAgaWYgKHhwdF9idXNfcmVn aXN0ZXIoc2MtPnNpbV8wLCBzYy0+bXJzYXNfZGV2LDApICE9IENBTV9TVUNDRVNTKQorICAgIHsK KyAgICAgICAgY2FtX3NpbV9mcmVlKHNjLT5zaW1fMCwgVFJVRSk7IC8vIHBhc3NpbmcgdHJ1ZSBm cmVlcyB0aGUgZGV2cQorICAgICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOyAKKyAgICAg ICAgcmV0dXJuKEVOWElPKTsKKyAgICB9CisgICAgaWYgKHhwdF9jcmVhdGVfcGF0aCgmc2MtPnBh dGhfMCwgTlVMTCwgY2FtX3NpbV9wYXRoKHNjLT5zaW1fMCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDQU1f TFVOX1dJTERDQVJEKSAhPSBDQU1fUkVRX0NNUCkgeworICAgICAgICB4cHRfYnVzX2RlcmVnaXN0 ZXIoY2FtX3NpbV9wYXRoKHNjLT5zaW1fMCkpOworICAgICAgICBjYW1fc2ltX2ZyZWUoc2MtPnNp bV8wLCBUUlVFKTsgLy8gcGFzc2luZyB0cnVlIHdpbGwgZnJlZSB0aGUgZGV2cQorICAgICAgICBt dHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOyAKKyAgICAgICAgcmV0dXJuKEVOWElPKTsKKyAgICB9 CisgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKworICAgIC8qIAorICAgICAqIENyZWF0 ZSBTSU0gZm9yIGJ1cyAxIGFuZCByZWdpc3RlciwgYWxzbyBjcmVhdGUgcGF0aCAKKyAgICAgKi8K KyAgICBzYy0+c2ltXzEgPSBjYW1fc2ltX2FsbG9jKG1yc2FzX2FjdGlvbiwgbXJzYXNfcG9sbCwg Im1yc2FzIiwgc2MsCisgICAgICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSwgJnNj LT5zaW1fbG9jaywgbXJzYXNfY2FtX2RlcHRoLAorICAgICAgICBtcnNhc19jYW1fZGVwdGgsIGRl dnEpOworICAgIGlmIChzYy0+c2ltXzEgPT0gTlVMTCl7CisgICAgICAgIGNhbV9zaW1xX2ZyZWUo ZGV2cSk7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCByZWdp c3RlciBTSU1cbiIpOworICAgICAgICByZXR1cm4oRU5YSU8pOworICAgIH0KKworICAgIG10eF9s b2NrKCZzYy0+c2ltX2xvY2spOworICAgIGlmICh4cHRfYnVzX3JlZ2lzdGVyKHNjLT5zaW1fMSwg c2MtPm1yc2FzX2RldiwgMSkgIT0gQ0FNX1NVQ0NFU1MpeworICAgICAgICBjYW1fc2ltX2ZyZWUo c2MtPnNpbV8xLCBUUlVFKTsgLy8gcGFzc2luZyB0cnVlIGZyZWVzIHRoZSBkZXZxCisgICAgICAg IG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgICAgIHJldHVybihFTlhJTyk7CisgICAg fQorICAgIGlmICh4cHRfY3JlYXRlX3BhdGgoJnNjLT5wYXRoXzEsIE5VTEwsIGNhbV9zaW1fcGF0 aChzYy0+c2ltXzEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIENBTV9UQVJHRVRfV0lMRENB UkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCkgIT0gQ0FNX1JF UV9DTVApIHsKKyAgICAgICAgeHB0X2J1c19kZXJlZ2lzdGVyKGNhbV9zaW1fcGF0aChzYy0+c2lt XzEpKTsKKyAgICAgICAgY2FtX3NpbV9mcmVlKHNjLT5zaW1fMSwgVFJVRSk7CisgICAgICAgIG10 eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgICAgIHJldHVybihFTlhJTyk7CisgICAgfQor ICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisKKyNpZiAoX19GcmVlQlNEX3ZlcnNpb24g PD0gNzA0MDAwKQorICAgIGlmIChtcnNhc19idXNfc2NhbihzYykpeworICAgICAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJFcnJvciBpbiBidXMgc2Nhbi5cbiIpOworICAgICAgICBy ZXR1cm4oMSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1y c2FzX2NhbV9kZXRhY2g6ICAgICAgICBEZS1hbGxvY2F0ZXMgYW5kIHRlYXJkb3duIENBTSAgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlIAor ICoKKyAqIERlLXJlZ2lzdGVycyBhbmQgZnJlZXMgdGhlIHBhdGhzIGFuZCBTSU1zLiAKKyAqLwor dm9pZCBtcnNhc19jYW1fZGV0YWNoKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisJaWYgKHNj LT5ldl90cSAhPSBOVUxMKQorICAgICAgICB0YXNrcXVldWVfZnJlZShzYy0+ZXZfdHEpOworICAg IG10eF9sb2NrKCZzYy0+c2ltX2xvY2spOworICAgIGlmIChzYy0+cGF0aF8wKQorICAgICAgICB4 cHRfZnJlZV9wYXRoKHNjLT5wYXRoXzApOworICAgIGlmIChzYy0+c2ltXzApIHsKKyAgICAgICAg eHB0X2J1c19kZXJlZ2lzdGVyKGNhbV9zaW1fcGF0aChzYy0+c2ltXzApKTsKKyAgICAgICAgY2Ft X3NpbV9mcmVlKHNjLT5zaW1fMCwgRkFMU0UpOworICAgIH0KKyAgICBpZiAoc2MtPnBhdGhfMSkK KyAgICAgICAgeHB0X2ZyZWVfcGF0aChzYy0+cGF0aF8xKTsKKyAgICBpZiAoc2MtPnNpbV8xKSB7 CisgICAgICAgIHhwdF9idXNfZGVyZWdpc3RlcihjYW1fc2ltX3BhdGgoc2MtPnNpbV8xKSk7Cisg ICAgICAgIGNhbV9zaW1fZnJlZShzYy0+c2ltXzEsIFRSVUUpOworICAgIH0KKyAgICBtdHhfdW5s b2NrKCZzYy0+c2ltX2xvY2spOworfQorCisvKioKKyAqIG1yc2FzX2FjdGlvbjogICAgICAgICAg ICBTSU0gY2FsbGJhY2sgZW50cnkgcG9pbnQgICAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAg ICBwb2ludGVyIHRvIFNJTSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyIHRv IENBTSBDb250cm9sIEJsb2NrCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgQ0FNIHN1 YnN5c3RlbSByZXF1ZXN0cy4gVGhlIHR5cGUgb2YgcmVxdWVzdCBpcworICogc3RvcmVkIGluIGNj Yi0+Y2NiX2guZnVuY19jb2RlLiAgVGhlIHByZXByb2Nlc3NvciAjaWZkZWYgaXMgbmVjZXNzYXJ5 CisgKiBiZWNhdXNlIGNjYi0+Y3BpLm1heGlvIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZyZWVCU0Qg dmVyc2lvbiA3LjQgb3IgCisgKiBlYXJsaWVyLiAgIAorICovCitzdGF0aWMgdm9pZCBtcnNhc19h Y3Rpb24oc3RydWN0IGNhbV9zaW0gKnNpbSwgdW5pb24gY2NiICpjY2IpCit7CisgICAgc3RydWN0 IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKiljYW1fc2ltX3NvZnRjKHNp bSk7CisgICAgc3RydWN0IGNjYl9oZHIgKmNjYl9oID0gJihjY2ItPmNjYl9oKTsKKyAgICB1X2lu dDMyX3QgZGV2aWNlX2lkOworCisgICAgc3dpdGNoIChjY2ItPmNjYl9oLmZ1bmNfY29kZSkgewor ICAgICAgICBjYXNlIFhQVF9TQ1NJX0lPOgorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2Vf aWQgPSBjY2JfaC0+dGFyZ2V0X2lkOworCisgICAgICAgICAgICAvKiAKKyAgICAgICAgICAgICAq IGJ1cyAwIGlzIExELCBidXMgMSBpcyBmb3Igc3lzdGVtLVBEIAorICAgICAgICAgICAgICovIAor ICAgICAgICAgICAgaWYgKGNhbV9zaW1fYnVzKHNpbSkgPT0gMSAmJiAKKyAgICAgICAgICAgICAg ICBzYy0+cGRfbGlzdFtkZXZpY2VfaWRdLmRyaXZlU3RhdGUgIT0gTVJfUERfU1RBVEVfU1lTVEVN KSB7CisgICAgICAgICAgICAgICAgLy9jY2ItPmNjYl9oLnN0YXR1cyB8PSBDQU1fUkVRX0lOVkFM SUQ7CisgICAgICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0RFVl9OT1RfVEhF UkU7CisgICAgICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtcnNhc19zdGFydGlvKHNjLCBzaW0s IGNjYikpeworICAgICAgICAgICAgICAgICAgICBjY2ItPmNjYl9oLnN0YXR1cyB8PSBDQU1fUkVR X0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgIHhwdF9kb25lKGNjYik7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgICAgY2FzZSBYUFRfQUJPUlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNjYi0+Y2NiX2gu c3RhdHVzID0gQ0FNX1VBX0FCT1JUOworICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgWFBUX1JFU0VUX0JVUzoKKyAg ICAgICAgeworICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGNhc2UgWFBUX0dFVF9UUkFOX1NFVFRJTkdTOgorICAgICAgICB7 CisgICAgICAgICAgICBjY2ItPmN0cy5wcm90b2NvbCA9IFBST1RPX1NDU0k7CisgICAgICAgICAg ICBjY2ItPmN0cy5wcm90b2NvbF92ZXJzaW9uID0gU0NTSV9SRVZfMjsKKyAgICAgICAgICAgIGNj Yi0+Y3RzLnRyYW5zcG9ydCA9IFhQT1JUX1NQSTsKKyAgICAgICAgICAgIGNjYi0+Y3RzLnRyYW5z cG9ydF92ZXJzaW9uID0gMjsgIAorICAgICAgICAgICAgY2NiLT5jdHMueHBvcnRfc3BlY2lmaWMu c3BpLnZhbGlkID0gQ1RTX1NQSV9WQUxJRF9ESVNDOworICAgICAgICAgICAgY2NiLT5jdHMueHBv cnRfc3BlY2lmaWMuc3BpLmZsYWdzID0gQ1RTX1NQSV9GTEFHU19ESVNDX0VOQjsKKyAgICAgICAg ICAgIGNjYi0+Y3RzLnByb3RvX3NwZWNpZmljLnNjc2kudmFsaWQgPSBDVFNfU0NTSV9WQUxJRF9U UTsKKyAgICAgICAgICAgIGNjYi0+Y3RzLnByb3RvX3NwZWNpZmljLnNjc2kuZmxhZ3MgPSBDVFNf U0NTSV9GTEFHU19UQUdfRU5COworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1f UkVRX0NNUDsKKyAgICAgICAgICAgIHhwdF9kb25lKGNjYik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBjYXNlIFhQVF9TRVRfVFJBTl9TRVRUSU5HUzoKKyAgICAgICAg eworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fRlVOQ19OT1RBVkFJTDsgCisg ICAgICAgICAgICB4cHRfZG9uZShjY2IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgY2FzZSBYUFRfQ0FMQ19HRU9NRVRSWToKKyAgICAgICAgeworICAgICAgICAgICAg Y2FtX2NhbGNfZ2VvbWV0cnkoJmNjYi0+Y2NnLCAxKTsgICAKKyAgICAgICAgICAgIHhwdF9kb25l KGNjYik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFhQVF9Q QVRIX0lOUToKKyAgICAgICAgeworICAgICAgICAgICAgY2NiLT5jcGkudmVyc2lvbl9udW0gPSAx OworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX2lucXVpcnkgPSAwOworICAgICAgICAgICAgY2Ni LT5jcGkudGFyZ2V0X3NwcnQgPSAwOworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX21pc2MgPSAw OworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX2VuZ19jbnQgPSAwOworICAgICAgICAgICAgY2Ni LT5jcGkubWF4X2x1biA9IE1SU0FTX1NDU0lfTUFYX0xVTlM7CisgICAgICAgICAgICBjY2ItPmNw aS51bml0X251bWJlciA9IGNhbV9zaW1fdW5pdChzaW0pOworICAgICAgICAgICAgY2NiLT5jcGku YnVzX2lkID0gY2FtX3NpbV9idXMoc2ltKTsKKyAgICAgICAgICAgIGNjYi0+Y3BpLmluaXRpYXRv cl9pZCA9IE1SU0FTX1NDU0lfSU5JVElBVE9SX0lEOyAKKyAgICAgICAgICAgIGNjYi0+Y3BpLmJh c2VfdHJhbnNmZXJfc3BlZWQgPSAxNTAwMDA7IAorICAgICAgICAgICAgc3RybmNweShjY2ItPmNw aS5zaW1fdmlkLCAiRnJlZUJTRCIsIFNJTV9JRExFTik7CisgICAgICAgICAgICBzdHJuY3B5KGNj Yi0+Y3BpLmhiYV92aWQsICJMU0kiLCBIQkFfSURMRU4pOworICAgICAgICAgICAgc3RybmNweShj Y2ItPmNwaS5kZXZfbmFtZSwgY2FtX3NpbV9uYW1lKHNpbSksIERFVl9JRExFTik7CisgICAgICAg ICAgICBjY2ItPmNwaS50cmFuc3BvcnQgPSBYUE9SVF9TUEk7CisgICAgICAgICAgICBjY2ItPmNw aS50cmFuc3BvcnRfdmVyc2lvbiA9IDI7CisgICAgICAgICAgICBjY2ItPmNwaS5wcm90b2NvbCA9 IFBST1RPX1NDU0k7CisgICAgICAgICAgICBjY2ItPmNwaS5wcm90b2NvbF92ZXJzaW9uID0gU0NT SV9SRVZfMjsKKyAgICAgICAgICAgIGlmIChjY2ItPmNwaS5idXNfaWQgPT0gMCkKKyAgICAgICAg ICAgICAgICBjY2ItPmNwaS5tYXhfdGFyZ2V0ID0gTVJTQVNfTUFYX0xELTE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgY2NiLT5jcGkubWF4X3RhcmdldCA9IE1SU0FTX01BWF9Q RC0xOworI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+IDcwNDAwMCkKKyAgICAgICAgICAgIGNjYi0+ Y3BpLm1heGlvID0gTVJTQVNfTUFYX0lPX1NJWkU7CisjZW5kaWYKKyAgICAgICAgICAgIGNjYi0+ Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9DTVA7CisgICAgICAgICAgICB4cHRfZG9uZShjY2IpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg eworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0lOVkFMSUQ7CisgICAg ICAgICAgICB4cHRfZG9uZShjY2IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKy8qKgorICogbXJzYXNfc2NzaWlvX3RpbWVvdXQgICAgICAgICBDYWxsYmFjayBm dW5jdGlvbiBmb3IgSU8gdGltZWQgb3V0CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAg IG1wdCBjb21tYW5kIGNvbnRleHQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSBh ZnRlciB0aW1lb3V0IHZhbHVlCisgKiBwcm92aWRlZCBieSBjY2IgaGVhZGVyIGZyb20gQ0FNIGxh eWVyLCBpZiB0aW1lciBleHBpcmVzLgorICogRHJpdmVyIHdpbGwgcnVuIHRpbWVyIGZvciBhbGwg RENETSBhbmQgTERJTyBjb21taW5nIGZyb20gQ0FNIGxheWVyLgorICogVGhpcyBmdW5jdGlvbiBp cyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgSU8gdGltZW91dCBhbmQgaXQgcnVucyBpbgorICogbm8t c2xlZXAgY29udGV4dC4gU2V0IGRvX3RpbWVkb3V0X3Jlc2V0IGluIEFkYXB0ZXIgY29udGV4dCBz byB0aGF0CisgKiBpdCB3aWxsIGV4ZWN1dGUgT0NSL0tpbGwgYWRwdGVyIGZyb20gb2NyX3RocmVh ZCBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorbXJzYXNfc2NzaWlvX3RpbWVvdXQodm9pZCAq ZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kOworICAgIHN0cnVjdCBtcnNh c19zb2Z0YyAqc2M7CisKKyAgICBjbWQgPSAoc3RydWN0IG1yc2FzX21wdF9jbWQgKilkYXRhOwor ICAgIHNjID0gY21kLT5zYzsKKworICAgIGlmIChjbWQtPmNjYl9wdHIgPT0gTlVMTCkgeworICAg ICAgICBwcmludGYoImNvbW1hbmQgdGltZW91dCB3aXRoIE5VTEwgY2NiXG4iKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIC8qIEJlbG93IGNhbGxvdXQgaXMgZHVtbXkgZW50cnkgc28g dGhhdCBpdCB3aWxsIGJlCisgICAgICogY2FuY2VsbGVkIGZyb20gbXJzYXNfY21kX2RvbmUoKS4g Tm93IENvbnRyb2xsZXIgd2lsbAorICAgICAqIGdvIHRvIE9DUi9LaWxsIEFkYXB0ZXIgYmFzZWQg b24gT0NSIGVuYWJsZS9kaXNhYmxlCisgICAgICogcHJvcGVydHkgb2YgQ29udHJvbGxlciBmcm9t IG9jcl90aHJlYWQgY29udGV4dC4KKyAgICAgKi8KKyAgICBjYWxsb3V0X3Jlc2V0KCZjbWQtPmNt X2NhbGxvdXQsICg2MDAwMDAgKiBoeikgLyAxMDAwLAorICAgIG1yc2FzX3Njc2lpb190aW1lb3V0 LCBjbWQpOworICAgIHNjLT5kb190aW1lZG91dF9yZXNldCA9IDE7CisgICAgaWYoc2MtPm9jcl90 aHJlYWRfYWN0aXZlKQorICAgICAgICB3YWtldXAoJnNjLT5vY3JfY2hhbik7Cit9CisKKy8qKgor ICogbXJzYXNfc3RhcnRpbzogICAgICAgICAgIFNDU0kgSU8gZW50cnkgcG9pbnQgICAKKyAqIGlu cHV0OiAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUgCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciB0byBDQU0gQ29udHJvbCBCbG9jaworICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFNDU0kgSU8gZW50cnkgcG9pbnQgYW5kIGl0IGluaXRp YXRlcyBJTyBwcm9jZXNzaW5nLiAKKyAqIEl0IGNvcGllcyB0aGUgSU8gYW5kIGRlcGVuZGluZyBp ZiB0aGUgSU8gaXMgcmVhZC93cml0ZSBvciBpbnF1aXJ5LCBpdCB3b3VsZCAKKyAqIGNhbGwgbXJz YXNfYnVpbGRfbGRpbygpIG9yIG1yc2FzX2J1aWxkX2RjZGIoKSwgcmVzcGVjdGl2ZWx5LiAgSXQg cmV0dXJucworICogMCBpZiB0aGUgY29tbWFuZCBpcyBzZW50IHRvIGZpcm13YXJlIHN1Y2Nlc3Nm dWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgMS4KKyAqLworc3RhdGljIGludDMyX3QgbXJzYXNf c3RhcnRpbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgY2FtX3NpbSAqc2ltLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IpCit7CisgICAgc3RydWN0 IG1yc2FzX21wdF9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgY2NiX2hkciAqY2NiX2ggPSAmKGNjYi0+ Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpjc2lvID0gJihjY2ItPmNzaW8pOworICAg IE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisKKyAgICBpZiAoKGNz aW8tPmNkYl9pby5jZGJfYnl0ZXNbMF0pID09IFNZTkNIUk9OSVpFX0NBQ0hFKXsKKyAgICAgICAg Y2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NNUDsKKyAgICAgICAgeHB0X2RvbmUoY2NiKTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGNjYl9oLT5zdGF0dXMgfD0gQ0FNX1NJ TV9RVUVVRUQ7CisgICAgY21kID0gbXJzYXNfZ2V0X21wdF9jbWQoc2MpOworCisgICAgaWYgKCFj bWQpIHsKKyAgICAgICAgY2NiX2gtPnN0YXR1cyB8PSBDQU1fUkVRVUVVRV9SRVE7CisgICAgICAg IHhwdF9kb25lKGNjYik7CisgICAgICAgIHJldHVybigwKTsgIAorICAgIH0KKworICAgIGlmICgo Y2NiX2gtPmZsYWdzICYgQ0FNX0RJUl9NQVNLKSAhPSBDQU1fRElSX05PTkUpIHsKKyAgICAgICAg aWYoY2NiX2gtPmZsYWdzICYgQ0FNX0RJUl9JTikKKyAgICAgICAgICAgIGNtZC0+ZmxhZ3MgfD0g TVJTQVNfRElSX0lOOworICAgICAgICBpZihjY2JfaC0+ZmxhZ3MgJiBDQU1fRElSX09VVCkKKyAg ICAgICAgICAgIGNtZC0+ZmxhZ3MgfD0gTVJTQVNfRElSX09VVDsKKyAgICB9IAorICAgIGVsc2Ug CisgICAgICAgIGNtZC0+ZmxhZ3MgPSBNUlNBU19ESVJfTk9ORTsgLyogbm8gZGF0YSAqLworCisv KgorICogICAgICAqIFhYWCBXZSBkb24ndCB5ZXQgc3VwcG9ydCBwaHlzaWNhbCBhZGRyZXNzZXMg aGVyZS4KKyAqLyAKKyAgICBzd2l0Y2ggKChjY2ItPmNjYl9oLmZsYWdzICYgQ0FNX0RBVEFfTUFT SykpIHsKKyAgICBjYXNlIENBTV9EQVRBX1BBRERSOgorICAgIGNhc2UgQ0FNX0RBVEFfU0dfUEFE RFI6CisgICAgICAgICBwcmludGYoIiVzOiBwaHlzaWNhbCBhZGRyZXNzZXMgbm90IHN1cHBvcnRl ZFxuIiwKKyAgICAgICAgICAgICAgIF9fZnVuY19fKTsKKyAgICAgICAgIG1yc2FzX3JlbGVhc2Vf bXB0X2NtZChjbWQpOworICAgICAgICAgY2NiX2gtPnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsK KyAgICAgICAgIGNjYl9oLT5zdGF0dXMgJj0gfkNBTV9TSU1fUVVFVUVEOworICAgICAgICAgZ290 byBkb25lOworICAgIGNhc2UgQ0FNX0RBVEFfU0c6CisgICAgICAgICBwcmludGYoIiVzOiBzY2F0 dGVyIGdhdGhlciBpcyBub3Qgc3VwcG9ydGVkXG4iLAorICAgICAgICAgICAgICAgX19mdW5jX18p OworICAgICAgICAgbXJzYXNfcmVsZWFzZV9tcHRfY21kKGNtZCk7CisgICAgICAgICBjY2JfaC0+ c3RhdHVzID0gQ0FNX1JFUV9JTlZBTElEOworICAgICAgICAgZ290byBkb25lOworCWNhc2UgQ0FN X0RBVEFfVkFERFI6CisgICAgICAgICBpZiAoY3Npby0+ZHhmZXJfbGVuID4gTVJTQVNfTUFYX0lP X1NJWkUpIHsKKyAgICAgICAgICAgICAgbXJzYXNfcmVsZWFzZV9tcHRfY21kKGNtZCk7CisgICAg ICAgICAgICAgIGNjYl9oLT5zdGF0dXMgPSBDQU1fUkVRX1RPT19CSUc7CisgICAgICAgICAgICAg IGdvdG8gZG9uZTsKKyAgICAgICAgICB9CisgICAgICAgICAgY21kLT5sZW5ndGggPSBjc2lvLT5k eGZlcl9sZW47CisgICAgICAgICAgaWYgKGNtZC0+bGVuZ3RoKSAKKyAgICAgICAgICAgICAgY21k LT5kYXRhID0gY3Npby0+ZGF0YV9wdHI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIGNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9JTlZBTElEOworICAgICAgICBnb3Rv IGRvbmU7CisgICAgfQorCisKKyAgICAvKiBzYXZlIGNjYiBwdHIgKi8KKyAgICBjbWQtPmNjYl9w dHIgPSBjY2I7CisKKyAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Moc2MsIChj bWQtPmluZGV4KS0xKTsKKyAgICBpZiAoIXJlcV9kZXNjKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBnZXQgcmVxdWVzdF9kZXNjcmlwdG9yLlxuIik7Cisg ICAgICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorICAgIG1lbXNldChyZXFfZGVzYywgMCwgc2l6 ZW9mKE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTikpOworICAgIGNtZC0+cmVxdWVzdF9k ZXNjID0gcmVxX2Rlc2M7CisKKyAgICBpZiAoY2NiX2gtPmZsYWdzICYgQ0FNX0NEQl9QT0lOVEVS KQorICAgICAgICBiY29weShjc2lvLT5jZGJfaW8uY2RiX3B0ciwgY21kLT5pb19yZXF1ZXN0LT5D REIuQ0RCMzIsIGNzaW8tPmNkYl9sZW4pOworICAgIGVsc2UKKyAgICAgICAgYmNvcHkoY3Npby0+ Y2RiX2lvLmNkYl9ieXRlcywgY21kLT5pb19yZXF1ZXN0LT5DREIuQ0RCMzIsIGNzaW8tPmNkYl9s ZW4pOworICAgIG10eF9sb2NrKCZzYy0+cmFpZG1hcF9sb2NrKTsKKworICAgIGlmIChtcnNhc19s ZGlvX2lucShzaW0sIGNjYikpIHsKKyAgICAgICAgaWYgKG1yc2FzX2J1aWxkX2xkaW8oc2MsIGNt ZCwgY2NiKSl7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJCdWls ZCBMRElPIGZhaWxlZC5cbiIpOworCSAgICBtdHhfdW5sb2NrKCZzYy0+cmFpZG1hcF9sb2NrKTsK KyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgZWxzZSB7 IAorICAgICAgICBpZiAobXJzYXNfYnVpbGRfZGNkYihzYywgY21kLCBjY2IsIHNpbSkpIHsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkJ1aWxkIERDREIgZmFpbGVk LlxuIik7CisJICAgIG10eF91bmxvY2soJnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAg cmV0dXJuKDEpOworICAgICAgICB9CisgICAgfQorICAgIG10eF91bmxvY2soJnNjLT5yYWlkbWFw X2xvY2spOworCisgICAgaWYgKGNtZC0+ZmxhZ3MgPT0gTVJTQVNfRElSX0lOKSAvL2Zyb20gZGV2 aWNlCisgICAgICAgIGNtZC0+aW9fcmVxdWVzdC0+Q29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05U Uk9MX1JFQUQ7CisgICAgZWxzZSBpZiAoY21kLT5mbGFncyA9PSBNUlNBU19ESVJfT1VUKSAgLy90 byBkZXZpY2UKKyAgICAgICAgY21kLT5pb19yZXF1ZXN0LT5Db250cm9sIHw9IE1QSTJfU0NTSUlP X0NPTlRST0xfV1JJVEU7CisKKyAgICBjbWQtPmlvX3JlcXVlc3QtPlNHTEZsYWdzID0gTVBJMl9T R0VfRkxBR1NfNjRfQklUX0FERFJFU1NJTkc7CisgICAgY21kLT5pb19yZXF1ZXN0LT5TR0xPZmZz ZXQwID0gb2Zmc2V0b2YoTVJTQVNfUkFJRF9TQ1NJX0lPX1JFUVVFU1QsIFNHTCkvNDsKKyAgICBj bWQtPmlvX3JlcXVlc3QtPlNlbnNlQnVmZmVyTG93QWRkcmVzcyA9IGNtZC0+c2Vuc2VfcGh5c19h ZGRyOworICAgIGNtZC0+aW9fcmVxdWVzdC0+U2Vuc2VCdWZmZXJMZW5ndGggPSBNUlNBU19TQ1NJ X1NFTlNFX0JVRkZFUlNJWkU7CisKKyAgICByZXFfZGVzYyA9IGNtZC0+cmVxdWVzdF9kZXNjOwor ICAgIHJlcV9kZXNjLT5TQ1NJSU8uU01JRCA9IGNtZC0+aW5kZXg7CisKKyAgICAvKgorICAgICAq IFN0YXJ0IHRpbWVyIGZvciBJTyB0aW1lb3V0LiBEZWZhdWx0IHRpbWVvdXQgdmFsdWUgaXMgOTAg c2Vjb25kLgorICAgICAqLworICAgIGNhbGxvdXRfcmVzZXQoJmNtZC0+Y21fY2FsbG91dCwgKHNj LT5tcnNhc19pb190aW1lb3V0ICogaHopIC8gMTAwMCwKKyAgICAgICAgbXJzYXNfc2NzaWlvX3Rp bWVvdXQsIGNtZCk7CisgICAgYXRvbWljX2luYygmc2MtPmZ3X291dHN0YW5kaW5nKTsKKworICAg IGlmKGF0b21pY19yZWFkKCZzYy0+Zndfb3V0c3RhbmRpbmcpID4gc2MtPmlvX2NtZHNfaGlnaHdh dGVyKQorICAgICAgICBzYy0+aW9fY21kc19oaWdod2F0ZXIrKzsKKworICAgIG1yc2FzX2ZpcmVf Y21kKHNjLCByZXFfZGVzYy0+YWRkci51LmxvdywgcmVxX2Rlc2MtPmFkZHIudS5oaWdoKTsKKyAg ICByZXR1cm4oMCk7CisKK2RvbmU6CisgICAgeHB0X2RvbmUoY2NiKTsKKyAgICByZXR1cm4oMCk7 Cit9CisKKy8qKgorICogbXJzYXNfbGRpb19pbnE6ICAgICAgICAgICBEZXRlcm1pbmVzIGlmIElP IGlzIHJlYWQvd3JpdGUgb3IgaW5xdWlyeSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgICAgcG9pbnRlciB0byBDQU0gQ29udHJvbCBCbG9jaworICoKKyAqIFRoaXMgZnVuY3Rpb24g ZGV0ZXJtaW5lcyBpZiB0aGUgSU8gaXMgcmVhZC93cml0ZSBvciBpbnF1aXJ5LiAgSXQgcmV0dXJu cyBhCisgKiAxIGlmIHRoZSBJTyBpcyByZWFkL3dyaXRlIGFuZCAwIGlmIGl0IGlzIGlucXVpcnku CisgKi8KK2ludCBtcnNhc19sZGlvX2lucShzdHJ1Y3QgY2FtX3NpbSAqc2ltLCB1bmlvbiBjY2Ig KmNjYikgCit7CisgICAgc3RydWN0IGNjYl9zY3NpaW8gKmNzaW8gPSAmKGNjYi0+Y3Npbyk7CisK KyAgICBpZiAoY2FtX3NpbV9idXMoc2ltKSA9PSAxKQorICAgICAgICByZXR1cm4oMCk7CisKKyAg ICBzd2l0Y2ggKGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMF0pIHsKKyAgICAgICAgY2FzZSBSRUFE XzEwOgorICAgICAgICBjYXNlIFdSSVRFXzEwOgorICAgICAgICBjYXNlIFJFQURfMTI6CisgICAg ICAgIGNhc2UgV1JJVEVfMTI6CisgICAgICAgIGNhc2UgUkVBRF82OgorICAgICAgICBjYXNlIFdS SVRFXzY6CisgICAgICAgIGNhc2UgUkVBRF8xNjoKKyAgICAgICAgY2FzZSBXUklURV8xNjoKKyAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgfQorfQorCisvKioKKyAqIG1yc2FzX2dldF9tcHRfY21kOiAgICAgICAgICAgIEdl dCBhIGNtZCBmcm9tIGZyZWUgY29tbWFuZCBwb29sICAKKyAqIGlucHV0OiAgICAgICAgICAgICAg ICAgICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIHJlbW92ZXMgYW4gTVBUIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBmcmVlIGxpc3QgYW5k IAorICogaW5pdGlhbGl6ZXMgaXQuCisgKi8KK3N0cnVjdCBtcnNhc19tcHRfY21kKiBtcnNhc19n ZXRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKSAKK3sKKyAgICBzdHJ1Y3QgbXJzYXNf bXB0X2NtZCAqY21kID0gTlVMTDsKKworICAgIG10eF9sb2NrKCZzYy0+bXB0X2NtZF9wb29sX2xv Y2spOworICAgIGlmICghVEFJTFFfRU1QVFkoJnNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCkp eworICAgICAgICBjbWQgPSBUQUlMUV9GSVJTVCgmc2MtPm1yc2FzX21wdF9jbWRfbGlzdF9oZWFk KTsKKyAgICAgICAgVEFJTFFfUkVNT1ZFKCZzYy0+bXJzYXNfbXB0X2NtZF9saXN0X2hlYWQsIGNt ZCwgbmV4dCk7CisgICAgfQorICAgIG1lbXNldCgodWludDhfdCAqKWNtZC0+aW9fcmVxdWVzdCwg MCwgTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSk7CisgICAgY21kLT5kYXRh ID0gTlVMTDsKKyAgICBjbWQtPmxlbmd0aCA9IDA7CisgICAgY21kLT5mbGFncyA9IDA7CisgICAg Y21kLT5lcnJvcl9jb2RlID0gMDsKKyAgICBjbWQtPmxvYWRfYmFsYW5jZSA9IDA7CisgICAgY21k LT5jY2JfcHRyID0gTlVMTDsKKyAgICBtdHhfdW5sb2NrKCZzYy0+bXB0X2NtZF9wb29sX2xvY2sp OworCisgICAgcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBtcnNhc19yZWxlYXNlX21wdF9jbWQ6 ICAgICAgUmV0dXJuIGEgY21kIHRvIGZyZWUgY29tbWFuZCBwb29sICAKKyAqIGlucHV0OiAgICAg ICAgICAgICAgICAgICAgICBDb21tYW5kIHBhY2tldCBmb3IgcmV0dXJuIHRvIGZyZWUgY29tbWFu ZCBwb29sIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBNUFQgY29tbWFuZCB0byB0 aGUgZnJlZSBjb21tYW5kIGxpc3QuCisgKi8KK3ZvaWQgbXJzYXNfcmVsZWFzZV9tcHRfY21kKHN0 cnVjdCBtcnNhc19tcHRfY21kICpjbWQpIAoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Mg PSBjbWQtPnNjOworCisgICAgbXR4X2xvY2soJnNjLT5tcHRfY21kX3Bvb2xfbG9jayk7CisgICAg Y21kLT5zeW5jX2NtZF9pZHggPSAodV9pbnQzMl90KU1SU0FTX1VMT05HX01BWDsKKyAgICBUQUlM UV9JTlNFUlRfVEFJTCgmKHNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCksIGNtZCwgbmV4dCk7 CisgICAgbXR4X3VubG9jaygmc2MtPm1wdF9jbWRfcG9vbF9sb2NrKTsKKworICAgIHJldHVybjsg Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3JlcXVlc3RfZGVzYzogICAgIEdldCByZXF1ZXN0IGRl c2NyaXB0b3IgZnJvbSBhcnJheSAgCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgQWRh cHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U01JRCBpbmRleCAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRo ZSByZXF1ZXN0IGRlc2NyaXB0b3IuCisgKi8KK01SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklP TiAqCittcnNhc19nZXRfcmVxdWVzdF9kZXNjKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHVfaW50 MTZfdCBpbmRleCkKK3sKKyAgICB1X2ludDhfdCAqcDsKKworICAgIGlmIChpbmRleCA+PSBzYy0+ bWF4X2Z3X2NtZHMpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSW52 YWxpZCBTTUlEICgweCV4KXJlcXVlc3QgZm9yIGRlc2NcbiIsIGluZGV4KTsKKyAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSBzYy0+cmVxX2Rlc2MgKyBzaXplb2YoTVJTQVNfUkVR VUVTVF9ERVNDUklQVE9SX1VOSU9OKSAqIGluZGV4OworCisgICAgcmV0dXJuIChNUlNBU19SRVFV RVNUX0RFU0NSSVBUT1JfVU5JT04gKilwOworfQorCisvKioKKyAqIG1yc2FzX2J1aWxkX2xkaW86 ICAgICAgIEJ1aWxkcyBhbiBMRElPIGNvbW1hbmQgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAg ICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQ b2ludGVyIHRvIENDQiAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGUgTERJTyBjb21t YW5kIHBhY2tldC4gIEl0IHJldHVybnMgMCBpZiB0aGUgCisgKiBjb21tYW5kIGlzIGJ1aWx0IHN1 Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYSAxLiAKKyAqLworaW50IG1yc2FzX2J1 aWxkX2xkaW8oc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21wdF9jbWQgKmNt ZCwKKyAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBjY2IgKmNjYikKK3sKKyAgICBzdHJ1Y3Qg Y2NiX2hkciAqY2NiX2ggPSAmKGNjYi0+Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpj c2lvID0gJihjY2ItPmNzaW8pOworICAgIHVfaW50MzJfdCBkZXZpY2VfaWQ7CisgICAgTVJTQVNf UkFJRF9TQ1NJX0lPX1JFUVVFU1QgKmlvX3JlcXVlc3Q7CisKKyAgICBkZXZpY2VfaWQgPSBjY2Jf aC0+dGFyZ2V0X2lkOworCisgICAgaW9fcmVxdWVzdCA9IGNtZC0+aW9fcmVxdWVzdDsKKyAgICBp b19yZXF1ZXN0LT5SYWlkQ29udGV4dC5WaXJ0dWFsRGlza1RndElkID0gZGV2aWNlX2lkOworICAg IGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnN0YXR1cyA9IDA7CisgICAgaW9fcmVxdWVzdC0+UmFp ZENvbnRleHQuZXhTdGF0dXMgPSAwOworCisgICAgLyoganVzdCB0aGUgY2RiIGxlbiwgb3RoZXIg ZmxhZ3MgemVybywgYW5kIE9SZWQtaW4gbGF0ZXIgZm9yIEZQICovIAorICAgIGlvX3JlcXVlc3Qt PklvRmxhZ3MgPSBjc2lvLT5jZGJfbGVuOworCisgICAgaWYgKG1yc2FzX3NldHVwX2lvKHNjLCBj bWQsIGNjYiwgZGV2aWNlX2lkLCBpb19yZXF1ZXN0KSAhPSBTVUNDRVNTKQorICAgICAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJCdWlsZCBsZGlvIG9yIGZwaW8gZXJyb3JcbiIpOyAK KyAgICAgICAgCisgICAgaW9fcmVxdWVzdC0+RGF0YUxlbmd0aCA9IGNtZC0+bGVuZ3RoOworCisg ICAgaWYgKG1yc2FzX21hcF9yZXF1ZXN0KHNjLCBjbWQpID09IFNVQ0NFU1MpIHsKKyAgICAgICAg aWYgKGNtZC0+c2dlX2NvdW50ID4gTVJTQVNfTUFYX1NHTCkgeworICAgICAgICAgICAgZGV2aWNl X3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRXJyb3I6IHNnZV9jb3VudCAoMHgleCkgZXhjZWVkcyIg CisgICAgICAgICAgICAgICAgIm1heCAoMHgleCkgYWxsb3dlZFxuIiwgY21kLT5zZ2VfY291bnQs IHNjLT5tYXhfbnVtX3NnZSk7CisgICAgICAgICAgICByZXR1cm4gKEZBSUwpOworICAgICAgICB9 CisgICAgICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0Lm51bVNHRSA9IGNtZC0+c2dlX2NvdW50 OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiRGF0YSBtYXAvbG9hZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuKEZBSUwpOworICAg IH0gCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1yc2FzX3NldHVwX2lvOiAgICAgICAg ICAgICBTZXQgdXAgZGF0YSBpbmNsdWRpbmcgRmFzdCBQYXRoIEkvTyAgCisgKiBpbnB1dDogICAg ICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHBhY2tldAorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gQ0NCIAorICoKKyAqIFRoaXMgZnVuY3Rp b24gYnVpbGRzIHRoZSBEQ0RCIGlucXVpcnkgY29tbWFuZC4gIEl0IHJldHVybnMgMCBpZiB0aGUg CisgKiBjb21tYW5kIGlzIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMg YSAxLiAKKyAqLworaW50IG1yc2FzX3NldHVwX2lvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0 cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgIHVuaW9uIGNjYiAq Y2NiLCB1X2ludDMyX3QgZGV2aWNlX2lkLAorICAgICAgICAgICAgICAgICAgICBNUlNBU19SQUlE X1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCkKK3sKKyAgICBzdHJ1Y3QgY2NiX2hkciAqY2Ni X2ggPSAmKGNjYi0+Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpjc2lvID0gJihjY2It PmNzaW8pOworICAgIHN0cnVjdCBJT19SRVFVRVNUX0lORk8gaW9faW5mbzsKKyAgICBNUl9GV19S QUlEX01BUF9BTEwgKm1hcF9wdHI7CisgICAgdV9pbnQ4X3QgZnBfcG9zc2libGU7CisgICAgdV9p bnQzMl90IHN0YXJ0X2xiYV9oaSwgc3RhcnRfbGJhX2xvLCBsZF9ibG9ja19zaXplOworICAgIHVf aW50MzJfdCBkYXRhbGVuZ3RoID0gMDsKKyAgICAgCisgICAgc3RhcnRfbGJhX2xvID0gMDsKKyAg ICBzdGFydF9sYmFfaGkgPSAwOworICAgIGZwX3Bvc3NpYmxlID0gMDsKKyAgICAgCisgICAgLyoK KyAgICAgKiBSRUFEXzYgKDB4MDgpIG9yIFdSSVRFXzYgKDB4MEEpIGNkYgorICAgICAqLworICAg IGlmIChjc2lvLT5jZGJfbGVuID09IDYpIHsKKyAgICAgICAgZGF0YWxlbmd0aCA9ICh1X2ludDMy X3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s0XTsKKyAgICAgICAgc3RhcnRfbGJhX2xvID0gKCh1 X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMV0gPDwgMTYpIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMl0gPDwgOCkg fAorICAgICAgICAgICAgICAgICAgICAgICAgKHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9i eXRlc1szXTsKKyAgICAgICAgc3RhcnRfbGJhX2xvICY9IDB4MUZGRkZGOworICAgIH0KKyAgICAv KgorICAgICAqIFJFQURfMTAgKDB4MjgpIG9yIFdSSVRFXzYgKDB4MkEpIGNkYgorICAgICAqLwor ICAgIGVsc2UgaWYgKGNzaW8tPmNkYl9sZW4gPT0gMTApIHsKKyAgICAgICAgZGF0YWxlbmd0aCA9 ICh1X2ludDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s4XSB8CisgICAgICAgICAgICAgICAg ICAgICAgICgodV9pbnQzMl90KWNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbN10gPDwgOCk7CisgICAg ICAgIHN0YXJ0X2xiYV9sbyA9ICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzJd IDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90KSBjc2lvLT5jZGJf aW8uY2RiX2J5dGVzWzNdIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAodV9pbnQz Ml90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzRdIDw8IDggfAorICAgICAgICAgICAgICAgICAg ICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbNV0pOworICAgIH0KKyAg ICAvKgorICAgICAqIFJFQURfMTIgKDB4QTgpIG9yIFdSSVRFXzEyICgweEFBKSBjZGIKKyAgICAg Ki8KKyAgICBlbHNlIGlmIChjc2lvLT5jZGJfbGVuID09IDEyKSB7CisgICAgICAgIGRhdGFsZW5n dGggPSAodV9pbnQzMl90KWNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbNl0gPDwgMjQgfAorICAgICAg ICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCljc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzddIDw8 IDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90KWNzaW8tPmNkYl9pby5j ZGJfYnl0ZXNbOF0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdClj c2lvLT5jZGJfaW8uY2RiX2J5dGVzWzldKTsKKyAgICAgICAgc3RhcnRfbGJhX2xvID0gKCh1X2lu dDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMl0gPDwgMjQpIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbM10gPDwgMTYpIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0 ZXNbNF0gPDwgOCB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCkgY3Npby0+ Y2RiX2lvLmNkYl9ieXRlc1s1XSk7CisgICAgfQorICAgIC8qCisgICAgICogUkVBRF8xNiAoMHg4 OCkgb3IgV1JJVEVfMTYgKDB4eDhBKSBjZGIKKyAgICAgKi8KKyAgICBlbHNlIGlmIChjc2lvLT5j ZGJfbGVuID09IDE2KSB7CisgICAgICAgIGRhdGFsZW5ndGggPSAodV9pbnQzMl90KWNzaW8tPmNk Yl9pby5jZGJfYnl0ZXNbMTBdIDw8IDI0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCh1X2lu dDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1sxMV0gPDwgMTYpIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgKCh1X2ludDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1sxMl0gPDwgOCkgfAor ICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCljc2lvLT5jZGJfaW8uY2RiX2J5dGVz WzEzXSk7CisgICAgICAgIHN0YXJ0X2xiYV9sbyA9ICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8u Y2RiX2J5dGVzWzZdIDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90 KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzddIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAg ICAgICAodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzhdIDw8IDggfAorICAgICAg ICAgICAgICAgICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbOV0p OworICAgICAgICBzdGFydF9sYmFfaGkgPSAoKHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9i eXRlc1syXSA8PCAyNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCkgY3Np by0+Y2RiX2lvLmNkYl9ieXRlc1szXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAg KHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s0XSA8PCA4IHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzVdKTsKKyAg ICB9CisKKyAgICBtZW1zZXQoJmlvX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgSU9fUkVRVUVTVF9J TkZPKSk7CisgICAgaW9faW5mby5sZFN0YXJ0QmxvY2sgPSAoKHVfaW50NjRfdClzdGFydF9sYmFf aGkgPDwgMzIpIHwgc3RhcnRfbGJhX2xvOworICAgIGlvX2luZm8ubnVtQmxvY2tzID0gZGF0YWxl bmd0aDsKKyAgICBpb19pbmZvLmxkVGd0SWQgPSBkZXZpY2VfaWQ7CisKKyAgICBpZiAoY2NiX2gt PmZsYWdzID09IENBTV9ESVJfSU4pCisgICAgICAgIGlvX2luZm8uaXNSZWFkID0gMTsKKworICAg IG1hcF9wdHIgPSBzYy0+cmFpZG1hcF9tZW1bKHNjLT5tYXBfaWQgJiAxKV07CisgICAgbGRfYmxv Y2tfc2l6ZSA9IE1SX0xkQmxvY2tTaXplR2V0KGRldmljZV9pZCwgbWFwX3B0ciwgc2MpOworCisg ICAgaWYgKChNUl9UYXJnZXRJZFRvTGRHZXQoZGV2aWNlX2lkLCBtYXBfcHRyKSA+PSBNQVhfTE9H SUNBTF9EUklWRVMpIHx8IAorICAgICAgICAgICAgKCFzYy0+ZmFzdF9wYXRoX2lvKSkgeworICAg ICAgICBpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5yZWdMb2NrRmxhZ3MgPSAwOworICAgICAgICBm cF9wb3NzaWJsZSA9IDA7CisgICAgfSAKKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgaWYgKE1S X0J1aWxkUmFpZENvbnRleHQoc2MsICZpb19pbmZvLCAmaW9fcmVxdWVzdC0+UmFpZENvbnRleHQs IG1hcF9wdHIpKQorICAgICAgICAgICAgZnBfcG9zc2libGUgPSBpb19pbmZvLmZwT2tGb3JJbzsK KyAgICB9CisKKyAgICBpZiAoZnBfcG9zc2libGUpIHsKKyAgICAgICAgbXJzYXNfc2V0X3BkX2xi YShpb19yZXF1ZXN0LCBjc2lvLT5jZGJfbGVuLCAmaW9faW5mbywgY2NiLCBtYXBfcHRyLCAKKyAg ICAgICAgICAgIHN0YXJ0X2xiYV9sbywgbGRfYmxvY2tfc2l6ZSk7CisgICAgICAgIGlvX3JlcXVl c3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CisgICAgICAgIGNt ZC0+cmVxdWVzdF9kZXNjLT5TQ1NJSU8uUmVxdWVzdEZsYWdzID0KKyAgICAgICAgICAgICAgICAg ICAgICAgIChNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZCisgICAgICAgICAg ICAgICAgICAgICAgICAgPDwgTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOwor ICAgICAgICBpZiAoKHNjLT5sb2FkX2JhbGFuY2VfaW5mb1tkZXZpY2VfaWRdLmxvYWRCYWxhbmNl RmxhZykgJiYgKGlvX2luZm8uaXNSZWFkKSkgeworICAgICAgICAgICAgaW9faW5mby5kZXZIYW5k bGUgPSBtcnNhc19nZXRfdXBkYXRlZF9kZXZfaGFuZGxlKCZzYy0+bG9hZF9iYWxhbmNlX2luZm9b ZGV2aWNlX2lkXSwgCisgICAgICAgICAgICAgICAgJmlvX2luZm8pOworICAgICAgICAgICAgY21k LT5sb2FkX2JhbGFuY2UgPSBNUlNBU19MT0FEX0JBTEFOQ0VfRkxBRzsKKyAgICAgICAgfSAKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgY21kLT5sb2FkX2JhbGFuY2UgPSAwOworICAgICAgICBj bWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLkRldkhhbmRsZSA9IGlvX2luZm8uZGV2SGFuZGxlOwor ICAgICAgICBpb19yZXF1ZXN0LT5EZXZIYW5kbGUgPSBpb19pbmZvLmRldkhhbmRsZTsKKyAgICB9 IAorICAgIGVsc2UgeworICAgICAgICAvKiBOb3QgRlAgSU8gKi8KKyAgICAgICAgaW9fcmVxdWVz dC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0gbWFwX3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1l b3V0U2VjOworICAgICAgICBjbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9 CisgICAgICAgICAgICAoTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX0xEX0lPIDw8IE1SU0FTX1JF UV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKKyAgICAgICAgaW9fcmVxdWVzdC0+RnVuY3Rp b24gPSBNUlNBU19NUEkyX0ZVTkNUSU9OX0xEX0lPX1JFUVVFU1Q7CisgICAgICAgIGlvX3JlcXVl c3QtPkRldkhhbmRsZSA9IGRldmljZV9pZDsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisv KioKKyAqIG1yc2FzX2J1aWxkX2RjZGI6ICAgICAgIEJ1aWxkcyBhbiBEQ0RCIGNvbW1hbmQgIAor ICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisg KiAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0CisgKiAg ICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIENDQiAKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGJ1aWxkcyB0aGUgRENEQiBpbnF1aXJ5IGNvbW1hbmQuICBJdCByZXR1cm5zIDAgaWYgdGhl IAorICogY29tbWFuZCBpcyBidWlsdCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBpdCByZXR1cm5z IGEgMS4gCisgKi8KK2ludCBtcnNhc19idWlsZF9kY2RiKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Ms IHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgICAgdW5pb24g Y2NiICpjY2IsIHN0cnVjdCBjYW1fc2ltICpzaW0pCit7CisgICAgc3RydWN0IGNjYl9oZHIgKmNj Yl9oID0gJihjY2ItPmNjYl9oKTsKKyAgICB1X2ludDMyX3QgZGV2aWNlX2lkOworICAgIE1SX0ZX X1JBSURfTUFQX0FMTCAqbWFwX3B0cjsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAq aW9fcmVxdWVzdDsKKworICAgIGlvX3JlcXVlc3QgPSBjbWQtPmlvX3JlcXVlc3Q7CisgICAgZGV2 aWNlX2lkID0gY2NiX2gtPnRhcmdldF9pZDsKKyAgICBtYXBfcHRyID0gc2MtPnJhaWRtYXBfbWVt WyhzYy0+bWFwX2lkICYgMSldOworCisgICAgLyogQ2hlY2sgaWYgdGhpcyBpcyBmb3Igc3lzdGVt IFBEICovIAorICAgIGlmIChjYW1fc2ltX2J1cyhzaW0pID09IDEgJiYgCisgICAgICAgICAgICBz Yy0+cGRfbGlzdFtkZXZpY2VfaWRdLmRyaXZlU3RhdGUgPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7 CisgICAgICAgIGlvX3JlcXVlc3QtPkZ1bmN0aW9uID0gMDsKKyAgICAgICAgaW9fcmVxdWVzdC0+ RGV2SGFuZGxlID0gbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRsSW5mb1tkZXZpY2VfaWRdLmN1ckRl dkhkbDsKKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0gbWFw X3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1lb3V0U2VjOworICAgICAgICBpb19yZXF1ZXN0LT5SYWlk Q29udGV4dC5yZWdMb2NrRmxhZ3MgPSAwOworICAgICAgICBpb19yZXF1ZXN0LT5SYWlkQ29udGV4 dC5yZWdMb2NrUm93TEJBID0gMDsKKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVn TG9ja0xlbmd0aCA9IDA7CisgICAgICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlJBSURGbGFn cyA9IE1SX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfU1lTVEVNX1BEIDw8IAorICAgICAgICAgICAg TVJfUkFJRF9DVFhfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9TSElGVDsKKyAgICAgICAgY21kLT5y ZXF1ZXN0X2Rlc2MtPlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPSAKKyAgICAgICAgICAgIChNUEkyX1JF UV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZIDw8IAorICAgICAgICAgICAgTVJTQVNfUkVR X0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworICAgICAgICBjbWQtPnJlcXVlc3RfZGVzYy0+ U0NTSUlPLkRldkhhbmRsZSA9IAorICAgICAgICAgICAgbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRs SW5mb1tkZXZpY2VfaWRdLmN1ckRldkhkbDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlv X3JlcXVlc3QtPkZ1bmN0aW9uICA9IE1SU0FTX01QSTJfRlVOQ1RJT05fTERfSU9fUkVRVUVTVDsK KyAgICAgICAgaW9fcmVxdWVzdC0+RGV2SGFuZGxlID0gZGV2aWNlX2lkOworICAgICAgICBjbWQt PnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9CisgICAgICAgICAgICAoTVBJMl9S RVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTyA8PCBNUlNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQ RV9TSElGVCk7CisgICAgfQorCQorICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlZpcnR1YWxE aXNrVGd0SWQgPSBkZXZpY2VfaWQ7CisgICAgaW9fcmVxdWVzdC0+TFVOWzFdID0gY2NiX2gtPnRh cmdldF9sdW4gJiAweEY7CisgICAgaW9fcmVxdWVzdC0+RGF0YUxlbmd0aCA9IGNtZC0+bGVuZ3Ro OworCisgICAgaWYgKG1yc2FzX21hcF9yZXF1ZXN0KHNjLCBjbWQpID09IFNVQ0NFU1MpIHsKKyAg ICAgICAgaWYgKGNtZC0+c2dlX2NvdW50ID4gc2MtPm1heF9udW1fc2dlKSB7CisgICAgICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJFcnJvcjogc2dlX2NvdW50ICgweCV4KSBl eGNlZWRzIiAKKyAgICAgICAgICAgICAgICAibWF4ICgweCV4KSBhbGxvd2VkXG4iLCBjbWQtPnNn ZV9jb3VudCwgc2MtPm1heF9udW1fc2dlKTsKKyAgICAgICAgICAgIHJldHVybiAoMSk7CisgICAg ICAgIH0KKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQubnVtU0dFID0gY21kLT5zZ2Vf Y291bnQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJEYXRhIG1hcC9sb2FkIGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4oMSk7Cisg ICAgfSAKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKgorICogbXJzYXNfbWFwX3JlcXVlc3Q6ICAg ICAgICAgICBNYXAgYW5kIGxvYWQgZGF0YSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHBhY2tldAorICoKKyAqIEZvciBkYXRhIGZyb20g T1MsIG1hcCBhbmQgbG9hZCB0aGUgZGF0YSBidWZmZXIgaW50byBidXMgc3BhY2UuICBUaGUKKyAq IFNHIGxpc3QgaXMgYnVpbHQgaW4gdGhlIGNhbGxiYWNrLiAgSWYgdGhlICBidXMgZG1hbWFwIGxv YWQgaXMgbm90CisgKiBzdWNjZXNzZnVsLCBjbWQtPmVycm9yX2NvZGUgd2lsbCBjb250YWluIHRo ZSAgZXJyb3IgY29kZSBhbmQgYSAxIGlzIAorICogcmV0dXJuZWQuCisgKi8KK2ludCBtcnNhc19t YXBfcmVxdWVzdChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAq Y21kKQoreworICAgIHVfaW50MzJfdCByZXRjb2RlID0gMDsKKyAgICBzdHJ1Y3QgY2FtX3NpbSAq c2ltOworICAgIGludCBmbGFnID0gQlVTX0RNQV9OT1dBSVQ7CisKKyAgICBzaW0gPSB4cHRfcGF0 aF9zaW0oY21kLT5jY2JfcHRyLT5jY2JfaC5wYXRoKTsKKworICAgIGlmIChjbWQtPmRhdGEgIT0g TlVMTCkgeworICAgICAgICBtdHhfbG9jaygmc2MtPmlvX2xvY2spOworICAgICAgICAvKiBNYXAg ZGF0YSBidWZmZXIgaW50byBidXMgc3BhY2UgKi8KKyAgICAgICAgcmV0Y29kZSA9IGJ1c19kbWFt YXBfbG9hZChzYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsIGNtZC0+ZGF0YSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC0+bGVuZ3RoLCBtcnNhc19kYXRhX2xvYWRfY2Is IGNtZCwgZmxhZyk7CisgICAgICAgIG10eF91bmxvY2soJnNjLT5pb19sb2NrKTsKKwlpZiAocmV0 Y29kZSkKKwkgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiYnVzX2RtYW1hcF9sb2Fk KCk6IHJldGNvZGUgPSAlZFxuIiwgcmV0Y29kZSk7CisgICAgICAgIGlmIChyZXRjb2RlID09IEVJ TlBST0dSRVNTKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJy ZXF1ZXN0IGxvYWQgaW4gcHJvZ3Jlc3NcbiIpOworICAgICAgICAgICAgbXJzYXNfZnJlZXplX3Np bXEoY21kLCBzaW0pOworICAgICAgICB9IAorICAgIH0KKyAgICBpZiAoY21kLT5lcnJvcl9jb2Rl KQorICAgICAgICByZXR1cm4oMSk7CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioKKyAq IG1yc2FzX3VubWFwX3JlcXVlc3Q6ICAgICAgIFVubWFwIGFuZCB1bmxvYWQgZGF0YSAgIAorICog aW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0Cisg KgorICogVGhpcyBmdW5jdGlvbiB1bm1hcHMgYW5kIHVubG9hZHMgZGF0YSBmcm9tIE9TLgorICov Cit2b2lkIG1yc2FzX3VubWFwX3JlcXVlc3Qoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0 IG1yc2FzX21wdF9jbWQgKmNtZCkKK3sKKyAgICBpZiAoY21kLT5kYXRhICE9IE5VTEwpIHsKKyAg ICAgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfSU4pCisgICAgICAgICAgICBidXNfZG1h bWFwX3N5bmMoc2MtPmRhdGFfdGFnLCBjbWQtPmRhdGFfZG1hbWFwLCBCVVNfRE1BU1lOQ19QT1NU UkVBRCk7CisgICAgICAgIGlmIChjbWQtPmZsYWdzICYgTVJTQVNfRElSX09VVCkKKyAgICAgICAg ICAgIGJ1c19kbWFtYXBfc3luYyhzYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsIEJVU19E TUFTWU5DX1BPU1RXUklURSk7CisgICAgICAgIG10eF9sb2NrKCZzYy0+aW9fbG9jayk7CisgICAg ICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kYXRhX3RhZywgY21kLT5kYXRhX2RtYW1hcCk7Cisg ICAgICAgIG10eF91bmxvY2soJnNjLT5pb19sb2NrKTsKKyAgICB9Cit9CisKKy8qKgorICogbXJz YXNfZGF0YV9sb2FkX2NiOiAgICAgICAgQ2FsbGJhY2sgZW50cnkgcG9pbnQgICAKKyAqIGlucHV0 OiAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBwYWNrZXQgYXMgYXJndW1l bnQgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHNlZ21lbnQKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzZWdtZW50cworICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgRXJyb3IgCisgKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sg ZnVuY3Rpb24gb2YgdGhlIGJ1cyBkbWEgbWFwIGxvYWQuICBJdCBidWlsZHMgCisgKiB0aGUgU0cg bGlzdC4gIAorICovCitzdGF0aWMgdm9pZAorbXJzYXNfZGF0YV9sb2FkX2NiKHZvaWQgKmFyZywg YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VnLCBpbnQgZXJyb3IpCit7CisgICAgc3Ry dWN0IG1yc2FzX21wdF9jbWQgKmNtZCA9IChzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqKWFyZzsKKyAg ICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjID0gY21kLT5zYzsKKyAgICBNUlNBU19SQUlEX1NDU0lf SU9fUkVRVUVTVCAqaW9fcmVxdWVzdDsKKyAgICBwTXBpMjVJZWVlU2dlQ2hhaW42NF90IHNnbF9w dHI7CisgICAgaW50IGk9MCwgc2dfcHJvY2Vzc2VkPTA7CisKKyAgICBpZiAoZXJyb3IpCisgICAg eworICAgICAgICBjbWQtPmVycm9yX2NvZGUgPSBlcnJvcjsKKyAgICAgICAgZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCAibXJzYXNfZGF0YV9sb2FkX2NiOiBlcnJvcj0lZFxuIiwgZXJyb3Ip OworICAgICAgICBpZiAoZXJyb3IgPT0gRUZCSUcpIHsKKyAgICAgICAgICAgIGNtZC0+Y2NiX3B0 ci0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9UT09fQklHOworICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfSU4pCisg ICAgICAgIGJ1c19kbWFtYXBfc3luYyhjbWQtPnNjLT5kYXRhX3RhZywgY21kLT5kYXRhX2RtYW1h cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQVNZ TkNfUFJFUkVBRCk7CisgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfT1VUKQorICAgICAg ICBidXNfZG1hbWFwX3N5bmMoY21kLT5zYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFTWU5DX1BS RVdSSVRFKTsKKyAgICBpZiAobnNlZyA+IHNjLT5tYXhfbnVtX3NnZSkgeworICAgICAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJTR0UgY291bnQgaXMgdG9vIGxhcmdlIG9yIDAuXG4i KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlvX3JlcXVlc3QgPSBjbWQtPmlvX3Jl cXVlc3Q7CisgICAgc2dsX3B0ciA9IChwTXBpMjVJZWVlU2dlQ2hhaW42NF90KSZpb19yZXF1ZXN0 LT5TR0w7CisKKyAgICBpZiAobnNlZyAhPSAwKSB7CisgICAgICAgIGZvciAoaT0wOyBpIDwgbnNl ZzsgaSsrKSB7CisgICAgICAgICAgICBzZ2xfcHRyLT5BZGRyZXNzID0gc2Vnc1tpXS5kc19hZGRy OworICAgICAgICAgICAgc2dsX3B0ci0+TGVuZ3RoID0gc2Vnc1tpXS5kc19sZW47CisgICAgICAg ICAgICBzZ2xfcHRyLT5GbGFncyA9IDA7CisJICAgIHNnbF9wdHIrKzsKKwkgICAgc2dfcHJvY2Vz c2VkID0gaSArIDE7CisJICAgIC8qIAorICAgICAgICAgICAgICogUHJlcGFyZSBjaGFpbiBlbGVt ZW50IAorICAgICAgICAgICAgICovCisJICAgIGlmICgoc2dfcHJvY2Vzc2VkID09IChzYy0+bWF4 X3NnZV9pbl9tYWluX21zZyAtIDEpKSAmJgorCQkobnNlZyA+IHNjLT5tYXhfc2dlX2luX21haW5f bXNnKSkgeworICAgICAgICAgICAgICAgIHBNcGkyNUllZWVTZ2VDaGFpbjY0X3Qgc2dfY2hhaW47 CisJICAgICAgICBjbWQtPmlvX3JlcXVlc3QtPkNoYWluT2Zmc2V0ID0gc2MtPmNoYWluX29mZnNl dF9pb19yZXF1ZXN0OworCSAgICAgICAgc2dfY2hhaW4gPSBzZ2xfcHRyOworCSAgICAgICAgc2df Y2hhaW4tPkZsYWdzID0gCisgICAgICAgICAgICAgICAgICAgIChJRUVFX1NHRV9GTEFHU19DSEFJ Tl9FTEVNRU5UIHwgTVBJMl9JRUVFX1NHRV9GTEFHU19JT0NQTEJOVEFfQUREUik7CisJICAgICAg ICBzZ19jaGFpbi0+TGVuZ3RoID0gKHNpemVvZihNUEkyX1NHRV9JT19VTklPTikgKiAobnNlZyAt IHNnX3Byb2Nlc3NlZCkpOworCSAgICAgICAgc2dfY2hhaW4tPkFkZHJlc3MgPSBjbWQtPmNoYWlu X2ZyYW1lX3BoeXNfYWRkcjsKKwkgICAgICAgIHNnbF9wdHIgPSAocE1waTI1SWVlZVNnZUNoYWlu NjRfdCljbWQtPmNoYWluX2ZyYW1lOworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY21k LT5zZ2VfY291bnQgPSBuc2VnOworfQorCisvKioKKyAqIG1yc2FzX2ZyZWV6ZV9zaW1xOiAgICAg ICAgRnJlZXplIFNJTSBxdWV1ZSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIGNvbW1hbmQgcGFja2V0ICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9p bnRlciB0byBTSU0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWV6ZXMgdGhlIHNpbSBxdWV1ZS4K KyAqLworc3RhdGljIHZvaWQgbXJzYXNfZnJlZXplX3NpbXEoc3RydWN0IG1yc2FzX21wdF9jbWQg KmNtZCwgc3RydWN0IGNhbV9zaW0gKnNpbSkKK3sKKyAgICB1bmlvbiBjY2IgICAqY2NiID0gKHVu aW9uIGNjYiAqKShjbWQtPmNjYl9wdHIpOworCisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNpbSwgMSk7 CisgICAgY2NiLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX1JFTEVBU0VfU0lNUTsKKyAgICBjY2ItPmNj Yl9oLnN0YXR1cyB8PSBDQU1fUkVRVUVVRV9SRVE7Cit9CisKK3ZvaWQgbXJzYXNfeHB0X2ZyZWV6 ZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKSB7CisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNjLT5zaW1f MCwgMSk7CisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNjLT5zaW1fMSwgMSk7Cit9CisgICAgICAgICAg ICAKK3ZvaWQgbXJzYXNfeHB0X3JlbGVhc2Uoc3RydWN0IG1yc2FzX3NvZnRjICpzYykgeworICAg IHhwdF9yZWxlYXNlX3NpbXEoc2MtPnNpbV8wLCAxKTsKKyAgICB4cHRfcmVsZWFzZV9zaW1xKHNj LT5zaW1fMSwgMSk7Cit9CisKKy8qKgorICogbXJzYXNfY21kX2RvbmU6ICAgICAgICAgICBQZXJm b3JtIHJlbWFpbmluZyBjb21tYW5kIGNvbXBsZXRpb24gCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAgCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBwYWNrZXQgCisgKgorICogVGhpcyBmdW5jdGlv biBjYWxscyB1bW1hcCByZXF1ZXN0IGFuZCByZWxlYXNlcyB0aGUgTVBUIGNvbW1hbmQuIAorICov Cit2b2lkIG1yc2FzX2NtZF9kb25lKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNh c19tcHRfY21kICpjbWQpCit7CisgICAgY2FsbG91dF9zdG9wKCZjbWQtPmNtX2NhbGxvdXQpOwor ICAgIG1yc2FzX3VubWFwX3JlcXVlc3Qoc2MsIGNtZCk7CisgICAgbXR4X2xvY2soJnNjLT5zaW1f bG9jayk7CisgICAgeHB0X2RvbmUoY21kLT5jY2JfcHRyKTsKKyAgICBjbWQtPmNjYl9wdHIgPSBO VUxMOworICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgbXJzYXNfcmVsZWFzZV9t cHRfY21kKGNtZCk7Cit9CisKKy8qKgorICogbXJzYXNfcG9sbDogICAgICAgICAgICAgICBQb2xs aW5nIGVudHJ5IHBvaW50IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRv IFNJTSAgCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViIGZ1bmN0aW9uLgorICovCitz dGF0aWMgdm9pZCBtcnNhc19wb2xsKHN0cnVjdCBjYW1fc2ltICpzaW0pCit7CisgICAgc3RydWN0 IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKiljYW1fc2ltX3NvZnRjKHNp bSk7CisgICAgbXJzYXNfaXNyKCh2b2lkICopIHNjKTsKK30KKworLyoKKyAqIG1yc2FzX2J1c19z Y2FuOiAgICAgICAgICAgUGVyZm9ybSBidXMgc2NhbiAKKyAqIGlucHV0OiAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlICAKKyAqCisgKiBUaGlzIG1yc2FzX2J1 c19zY2FuIGZ1bmN0aW9uIGlzIG5lZWRlZCBmb3IgRnJlZUJTRCA3LnguICBBbHNvLCBpdCBzaG91 bGQKKyAqIG5vdCBiZSBjYWxsZWQgaW4gRnJlZUJTRCA4LnggYW5kIGxhdGVyIHZlcnNpb25zLCB3 aGVyZSB0aGUgYnVzIHNjYW4gaXMgCisgKiBhdXRvbWF0aWMuIAorICovIAoraW50IG1yc2FzX2J1 c19zY2FuKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdW5pb24gY2NiICpjY2JfMDsK KyAgICB1bmlvbiBjY2IgKmNjYl8xOworCisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7Cisg ICAgaWYgKChjY2JfMCA9IHhwdF9hbGxvY19jY2IoKSkgPT0gTlVMTCkgeworICAgICAgICBtdHhf dW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisK KyAgICBpZiAoKGNjYl8xID0geHB0X2FsbG9jX2NjYigpKSA9PSBOVUxMKSB7CisJeHB0X2ZyZWVf Y2NiKGNjYl8wKTsKKyAgICAgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAg cmV0dXJuKEVOT01FTSk7CisgICAgfSAKKworICAgIGlmICh4cHRfY3JlYXRlX3BhdGgoJmNjYl8w LT5jY2JfaC5wYXRoLCB4cHRfcGVyaXBoLCBjYW1fc2ltX3BhdGgoc2MtPnNpbV8wKSwKKyAgICAg ICAgICAgIENBTV9UQVJHRVRfV0lMRENBUkQsIENBTV9MVU5fV0lMRENBUkQpICE9IENBTV9SRVFf Q01QKXsKKyAgICAgICAgeHB0X2ZyZWVfY2NiKGNjYl8wKTsKKyAgICAgICAgeHB0X2ZyZWVfY2Ni KGNjYl8xKTsKKyAgICAgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAgcmV0 dXJuKEVJTyk7CisgICAgfQorCisgICAgaWYgKHhwdF9jcmVhdGVfcGF0aCgmY2NiXzEtPmNjYl9o LnBhdGgsIHhwdF9wZXJpcGgsIGNhbV9zaW1fcGF0aChzYy0+c2ltXzEpLAorICAgICAgICAgICAg Q0FNX1RBUkdFVF9XSUxEQ0FSRCwgQ0FNX0xVTl9XSUxEQ0FSRCkgIT0gQ0FNX1JFUV9DTVApewor ICAgICAgICB4cHRfZnJlZV9jY2IoY2NiXzApOworICAgICAgICB4cHRfZnJlZV9jY2IoY2NiXzEp OworICAgICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRUlP KTsKKyAgICB9CisKKyAgICB4cHRfcmVzY2FuKGNjYl8wKTsKKyAgICB4cHRfcmVzY2FuKGNjYl8x KTsKKyAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworCisgICAgcmV0dXJuKDApOworfQor CisvKgorICogbXJzYXNfYnVzX3NjYW5fc2ltOgkJUGVyZm9ybSBidXMgc2NhbiBwZXIgU0lNCisg KiBpbnB1dDoJCQkJCUFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAgCisgKiAJCQkJCQkJVGhp cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIEV2ZW50IGhhbmRsZXIgCisgKiAJCQkJCQkJ b24gTEQgY3JlYXRpb24vZGVsZXRpb24sIEpCT0Qgb24vb2ZmLgorICovIAoraW50IG1yc2FzX2J1 c19zY2FuX3NpbShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgY2FtX3NpbSAqc2ltKQor eworICAgIHVuaW9uIGNjYiAqY2NiOworCisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7Cisg ICAgaWYgKChjY2IgPSB4cHRfYWxsb2NfY2NiKCkpID09IE5VTEwpIHsKKyAgICAgICAgbXR4X3Vu bG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAg IGlmICh4cHRfY3JlYXRlX3BhdGgoJmNjYi0+Y2NiX2gucGF0aCwgeHB0X3BlcmlwaCwgY2FtX3Np bV9wYXRoKHNpbSksCisgICAgICAgICAgICBDQU1fVEFSR0VUX1dJTERDQVJELCBDQU1fTFVOX1dJ TERDQVJEKSAhPSBDQU1fUkVRX0NNUCl7CisgICAgICAgIHhwdF9mcmVlX2NjYihjY2IpOworICAg ICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRUlPKTsKKyAg ICB9CisgICAgeHB0X3Jlc2NhbihjY2IpOworICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7 CisKKyAgICByZXR1cm4oMCk7Cit9CkluZGV4OiBzeXMvZGV2L21yc2FzL21yc2FzX2ZwLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL2Rldi9tcnNhcy9tcnNhc19mcC5jCShyZXZpc2lvbiAwKQorKysgc3lz L2Rldi9tcnNhcy9tcnNhc19mcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkwIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2luY2x1ZGUgPGRldi9tcnNhcy9tcnNhcy5oPgorCisjaW5jbHVkZSA8Y2FtL2NhbS5oPgorI2lu Y2x1ZGUgPGNhbS9jYW1fY2NiLmg+CisjaW5jbHVkZSA8Y2FtL2NhbV9zaW0uaD4KKyNpbmNsdWRl IDxjYW0vY2FtX3hwdF9zaW0uaD4KKyNpbmNsdWRlIDxjYW0vY2FtX2RlYnVnLmg+CisjaW5jbHVk ZSA8Y2FtL2NhbV9wZXJpcGguaD4KKyNpbmNsdWRlIDxjYW0vY2FtX3hwdF9wZXJpcGguaD4KKwor CisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcworICovCit1X2ludDhfdCBNUl9WYWxpZGF0ZU1h cEluZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit1X2ludDhfdCBtcnNhc19nZXRfYmVzdF9h cm0oUExEX0xPQURfQkFMQU5DRV9JTkZPIGxiSW5mbywgdV9pbnQ4X3QgYXJtLCAKKyAgICAgICB1 X2ludDY0X3QgYmxvY2ssIHVfaW50MzJfdCBjb3VudCk7Cit1X2ludDhfdCBNUl9CdWlsZFJhaWRD b250ZXh0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIAorICAgICAgICBzdHJ1Y3QgSU9fUkVRVUVT VF9JTkZPICppb19pbmZvLAorICAgICAgICBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsIE1S X0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK3VfaW50OF90IE1SX0dldFBoeVBhcmFtcyhzdHJ1Y3Qg bXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3QgbGQsIAorICAgICAgICB1X2ludDY0X3Qgc3RyaXBS b3csIHVfaW50MTZfdCBzdHJpcFJlZiwgdV9pbnQ2NF90ICpwZEJsb2NrLAorICAgICAgICB1X2lu dDE2X3QgKnBEZXZIYW5kbGUsICBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsIAorICAgICAg ICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7Cit1X2ludDE2X3QgTVJfVGFyZ2V0SWRUb0xkR2V0 KHVfaW50MzJfdCBsZFRndElkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7Cit1X2ludDMyX3Qg TVJfTGRCbG9ja1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAq bWFwKTsKK3VfaW50MTZfdCBNUl9HZXRMRFRndElkKHVfaW50MzJfdCBsZCwgTVJfRldfUkFJRF9N QVBfQUxMICptYXApOwordV9pbnQxNl90IG1yc2FzX2dldF91cGRhdGVkX2Rldl9oYW5kbGUoUExE X0xPQURfQkFMQU5DRV9JTkZPIGxiSW5mbywgCisgICAgICAgIHN0cnVjdCBJT19SRVFVRVNUX0lO Rk8gKmlvX2luZm8pOwordV9pbnQzMl90IG1lZ2FfbW9kNjQodV9pbnQ2NF90IGRpdmlkZW5kLCB1 X2ludDMyX3QgZGl2aXNvcik7Cit1X2ludDMyX3QgTVJfR2V0U3BhbkJsb2NrKHVfaW50MzJfdCBs ZCwgdV9pbnQ2NF90IHJvdywgdV9pbnQ2NF90ICpzcGFuX2JsaywgCisgICAgICAgIE1SX0ZXX1JB SURfTUFQX0FMTCAqbWFwLCBpbnQgKmRpdl9lcnJvcik7Cit1X2ludDY0X3QgbWVnYV9kaXY2NF8z Mih1X2ludDY0X3QgZGl2aWRlbmQsIHVfaW50MzJfdCBkaXZpc29yKTsKK3ZvaWQgbXJzYXNfdXBk YXRlX2xvYWRfYmFsYW5jZV9wYXJhbXMoTVJfRldfUkFJRF9NQVBfQUxMICptYXAsIAorICAgICAg ICBQTERfTE9BRF9CQUxBTkNFX0lORk8gbGJJbmZvKTsKK3ZvaWQgbXJzYXNfc2V0X3BkX2xiYShN UlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCwgCisgICAgICAgIHVfaW50OF90 IGNkYl9sZW4sIHN0cnVjdCBJT19SRVFVRVNUX0lORk8gKmlvX2luZm8sIHVuaW9uIGNjYiAqY2Ni LAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVfaW50MzJfdCBy ZWZfdGFnLAorICAgICAgICB1X2ludDMyX3QgbGRfYmxvY2tfc2l6ZSk7CitzdGF0aWMgdV9pbnQx Nl90IE1SX0xkU3BhbkFycmF5R2V0KHVfaW50MzJfdCBsZCwgdV9pbnQzMl90IHNwYW4sIAorICAg ICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitzdGF0aWMgdV9pbnQxNl90IE1SX1BkRGV2 SGFuZGxlR2V0KHVfaW50MzJfdCBwZCwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApOworc3RhdGlj IHVfaW50MTZfdCBNUl9BclBkR2V0KHVfaW50MzJfdCBhciwgdV9pbnQzMl90IGFybSwgCisgICAg ICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK3N0YXRpYyBNUl9MRF9TUEFOICpNUl9MZFNw YW5QdHJHZXQodV9pbnQzMl90IGxkLCB1X2ludDMyX3Qgc3BhbiwgCisgICAgICAgIE1SX0ZXX1JB SURfTUFQX0FMTCAqbWFwKTsKK3N0YXRpYyB1X2ludDhfdCBNUl9MZERhdGFBcm1HZXQodV9pbnQz Ml90IGxkLCB1X2ludDMyX3QgYXJtSWR4LCAKKyAgICAgICAgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApOworc3RhdGljIE1SX1NQQU5fQkxPQ0tfSU5GTyAqTVJfTGRTcGFuSW5mb0dldCh1X2ludDMy X3QgbGQsIAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitNUl9MRF9SQUlEICpN Ul9MZFJhaWRHZXQodV9pbnQzMl90IGxkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CisKKwor LyoKKyAqIFJlbGF0ZWQgRGVmaW5lcworICovCisKK3R5cGVkZWYgdV9pbnQ2NF90ICBSRUdJT05f S0VZOwordHlwZWRlZiB1X2ludDMyX3QgIFJFR0lPTl9MRU47CisKKyNkZWZpbmUgTVJfTERfU1RB VEVfT1BUSU1BTCAzCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgVFJVRSAxCisKKworLyoKKyAq IFJlbGF0ZWQgTWFjcm9zCisgKi8KKworI2RlZmluZSBBQlNfRElGRihhLGIpICAgKCAoKGEpID4g KGIpKSA/ICgoYSkgLSAoYikpIDogKChiKSAtIChhKSkgKQorCisjZGVmaW5lIHN3YXAzMih4KSBc CisgICgodW5zaWduZWQgaW50KSggXAorICAgICgoKHVuc2lnbmVkIGludCkoeCkgJiAodW5zaWdu ZWQgaW50KTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgXAorICAgICgoKHVuc2lnbmVkIGludCkoeCkg JiAodW5zaWduZWQgaW50KTB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorICAgICgoKHVuc2lnbmVk IGludCkoeCkgJiAodW5zaWduZWQgaW50KTB4MDBmZjAwMDBVTCkgPj4gIDgpIHwgXAorICAgICgo KHVuc2lnbmVkIGludCkoeCkgJiAodW5zaWduZWQgaW50KTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkp CisKKworLyoKKyAqIEluLWxpbmUgZnVuY3Rpb25zIGZvciBtb2QgYW5kIGRpdmlkZSBvZiA2NC1i aXQgZGl2aWRlbmQgYW5kIDMyLWJpdCBkaXZpc29yLgorICogQXNzdW1lcyBhIGNoZWNrIGZvciBh IGRpdmlzb3Igb2YgemVybyBpcyBub3QgcG9zc2libGUuIAorICogCisgKiBAcGFyYW0gZGl2aWRl bmQgICA6IERpdmlkZW5kCisgKiBAcGFyYW0gZGl2aXNvciAgICA6IERpdmlzb3IKKyAqIEByZXR1 cm4gcmVtYWluZGVyCisgKi8KKworI2RlZmluZSBtZWdhX21vZDY0KGRpdmlkZW5kLCBkaXZpc29y KSAoeyBcCitpbnQgcmVtYWluZGVyOyBcCityZW1haW5kZXIgPSAoKHVfaW50NjRfdCkgKGRpdmlk ZW5kKSkgJSAodV9pbnQzMl90KSAoZGl2aXNvcik7IFwKK3JlbWFpbmRlcjt9KQorCisjZGVmaW5l IG1lZ2FfZGl2NjRfMzIoZGl2aWRlbmQsIGRpdmlzb3IpICh7IFwKK2ludCBxdW90aWVudDsgXAor cXVvdGllbnQgPSAoKHVfaW50NjRfdCkgKGRpdmlkZW5kKSkgLyAodV9pbnQzMl90KSAoZGl2aXNv cik7IFwKK3F1b3RpZW50O30pCisKKworLyoKKyAqIFZhcmlvdXMgUkFJRCBtYXAgYWNjZXNzIGZ1 bmN0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3MgdGhlIHZhcmlvdXMKKyAqIHBhcnRzIG9m IHRoZSBSQUlEIG1hcCBhbmQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4gCisg Ki8KKworTVJfTERfUkFJRCAqTVJfTGRSYWlkR2V0KHVfaW50MzJfdCBsZCwgTVJfRldfUkFJRF9N QVBfQUxMICptYXApCit7CisgICAgcmV0dXJuICgmbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0u bGRSYWlkKTsKK30KKwordV9pbnQxNl90IE1SX0dldExEVGd0SWQodV9pbnQzMl90IGxkLCBNUl9G V19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKyAgICByZXR1cm4gKG1hcC0+cmFpZE1hcC5sZFNwYW5N YXBbbGRdLmxkUmFpZC50YXJnZXRJZCk7Cit9CisKK3N0YXRpYyB1X2ludDE2X3QgTVJfTGRTcGFu QXJyYXlHZXQodV9pbnQzMl90IGxkLCB1X2ludDMyX3Qgc3BhbiwgTVJfRldfUkFJRF9NQVBfQUxM ICptYXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9j a1tzcGFuXS5zcGFuLmFycmF5UmVmOworfQorCitzdGF0aWMgdV9pbnQ4X3QgTVJfTGREYXRhQXJt R2V0KHVfaW50MzJfdCBsZCwgdV9pbnQzMl90IGFybUlkeCwgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLmRhdGFBcm1NYXBb YXJtSWR4XTsKK30KKworc3RhdGljIHVfaW50MTZfdCBNUl9QZERldkhhbmRsZUdldCh1X2ludDMy X3QgcGQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIHJldHVybiBtYXAtPnJhaWRN YXAuZGV2SG5kbEluZm9bcGRdLmN1ckRldkhkbDsKK30KKworc3RhdGljIHVfaW50MTZfdCBNUl9B clBkR2V0KHVfaW50MzJfdCBhciwgdV9pbnQzMl90IGFybSwgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5hck1hcEluZm9bYXJdLnBkW2FybV07Cit9 CisKK3N0YXRpYyBNUl9MRF9TUEFOICpNUl9MZFNwYW5QdHJHZXQodV9pbnQzMl90IGxkLCB1X2lu dDMyX3Qgc3BhbiwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7CisgICAgcmV0dXJuICZtYXAt PnJhaWRNYXAubGRTcGFuTWFwW2xkXS5zcGFuQmxvY2tbc3Bhbl0uc3BhbjsKK30KKworc3RhdGlj IE1SX1NQQU5fQkxPQ0tfSU5GTyAqTVJfTGRTcGFuSW5mb0dldCh1X2ludDMyX3QgbGQsIE1SX0ZX X1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIHJldHVybiAmbWFwLT5yYWlkTWFwLmxkU3Bhbk1h cFtsZF0uc3BhbkJsb2NrWzBdOworfQorCit1X2ludDE2X3QgTVJfVGFyZ2V0SWRUb0xkR2V0KHVf aW50MzJfdCBsZFRndElkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKyAgICByZXR1cm4g bWFwLT5yYWlkTWFwLmxkVGd0SWRUb0xkW2xkVGd0SWRdOworfQorCit1X2ludDMyX3QgTVJfTGRC bG9ja1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQor eworICAgIE1SX0xEX1JBSUQgKnJhaWQ7CisgICAgdV9pbnQzMl90IGxkLCBsZEJsb2NrU2l6ZSA9 IE1SU0FTX1NDU0lCTE9DS1NJWkU7CisKKyAgICBsZCA9IE1SX1RhcmdldElkVG9MZEdldChsZFRn dElkLCBtYXApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBsb2dpY2FsIGRyaXZlIHdhcyBy ZW1vdmVkLgorICAgICAqLworICAgIGlmIChsZCA+PSBNQVhfTE9HSUNBTF9EUklWRVMpCisgICAg ICAgIHJldHVybiBsZEJsb2NrU2l6ZTsKKworICAgIHJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIG1h cCk7CisgICAgbGRCbG9ja1NpemUgPSByYWlkLT5sb2dpY2FsQmxvY2tMZW5ndGg7CisgICAgaWYg KCFsZEJsb2NrU2l6ZSkKKyAgICAgICAgbGRCbG9ja1NpemUgPSBNUlNBU19TQ1NJQkxPQ0tTSVpF OworCisgICAgcmV0dXJuIGxkQmxvY2tTaXplOworfQorCisvKioKKyAqIE1SX1ZhbGlkYXRlTWFw SW5mbzogICAgICAgIFZhbGlkYXRlIFJBSUQgbWFwCisgKiBpbnB1dDogICAgICAgICAgICAgICAg ICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyBhbmQgdmFsaWRhdGVzIHRoZSBsb2FkZWQgUkFJRCBtYXAuIEl0IHJldHVybnMgMCBpZiAK KyAqIHN1Y2Nlc3NmdWwsIGFuZCAxIG90aGVyd2lzZS4KKyAqLwordV9pbnQ4X3QgTVJfVmFsaWRh dGVNYXBJbmZvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdWludDMyX3QgdG90YWxf bWFwX3N6OworICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwID0gc2MtPnJhaWRtYXBfbWVtWyhz Yy0+bWFwX2lkICYgMSldOworICAgIE1SX0ZXX1JBSURfTUFQICpwRndSYWlkTWFwID0gJm1hcC0+ cmFpZE1hcDsKKworICAgIHRvdGFsX21hcF9zeiA9IChzaXplb2YoTVJfRldfUkFJRF9NQVApIC0g c2l6ZW9mKE1SX0xEX1NQQU5fTUFQKSArCisgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKE1S X0xEX1NQQU5fTUFQKSAqIHBGd1JhaWRNYXAtPmxkQ291bnQpKTsKKworICAgIGlmIChwRndSYWlk TWFwLT50b3RhbFNpemUgIT0gdG90YWxfbWFwX3N6KSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIm1hcCBzaXplICV4IG5vdCBtYXRjaGluZyBsZCBjb3VudFxuIiwgdG90 YWxfbWFwX3N6KTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAic3BhbiBt YXA9ICV4XG4iLCAodW5zaWduZWQgaW50KXNpemVvZihNUl9MRF9TUEFOX01BUCkpOworICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJwRndSYWlkTWFwLT50b3RhbFNpemU9JXhc biIsIHBGd1JhaWRNYXAtPnRvdGFsU2l6ZSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAg ICBtcnNhc191cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhtYXAsIHNjLT5sb2FkX2JhbGFuY2Vf aW5mbyk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisqIE1SX0J1aWxkUmFpZENvbnRleHQ6 ICAgICAgICAgICBTZXQgdXAgRmFzdCBwYXRoIFJBSUQgY29udGV4dAorKgorKiBUaGlzIGZ1bmN0 aW9uIHdpbGwgaW5pdGlhdGUgY29tbWFuZCBwcm9jZXNzaW5nLiAgVGhlIHN0YXJ0L2VuZCByb3cg CisqIGFuZCBzdHJpcCBpbmZvcm1hdGlvbiBpcyBjYWxjdWxhdGVkIHRoZW4gdGhlIGxvY2sgaXMg YWNxdWlyZWQuCisqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiByZWdpb24gbG9jayB3 YXMgYWNxdWlyZWQgT1IgcmV0dXJuIAorKiBudW0gc3RyaXBzLgorKi8KK3VfaW50OF90IAorTVJf QnVpbGRSYWlkQ29udGV4dChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgSU9fUkVRVUVT VF9JTkZPICppb19pbmZvLAorICAgICAgICAgICAgICAgICAgICBSQUlEX0NPTlRFWFQgKnBSQUlE X0NvbnRleHQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIE1SX0xEX1JBSUQgKnJh aWQ7CisgICAgdV9pbnQzMl90IGxkLCBzdHJpcFNpemUsIHN0cmlwZV9tYXNrOworICAgIHVfaW50 NjRfdCBlbmRMYmEsIGVuZFN0cmlwLCBlbmRSb3csIHN0YXJ0X3Jvdywgc3RhcnRfc3RyaXA7Cisg ICAgUkVHSU9OX0tFWSByZWdTdGFydDsKKyAgICBSRUdJT05fTEVOIHJlZ1NpemU7CisgICAgdV9p bnQ4X3QgbnVtX3N0cmlwcywgbnVtUm93czsKKyAgICB1X2ludDE2X3QgcmVmX2luX3N0YXJ0X3N0 cmlwZSwgcmVmX2luX2VuZF9zdHJpcGU7CisgICAgdV9pbnQ2NF90IGxkU3RhcnRCbG9jazsKKyAg ICB1X2ludDMyX3QgbnVtQmxvY2tzLCBsZFRndElkOworICAgIHVfaW50OF90IGlzUmVhZCwgc3Ry aXBJZHg7CisgICAgdV9pbnQ4X3QgcmV0dmFsID0gMDsKKworICAgIGxkU3RhcnRCbG9jayA9IGlv X2luZm8tPmxkU3RhcnRCbG9jazsKKyAgICBudW1CbG9ja3MgPSBpb19pbmZvLT5udW1CbG9ja3M7 CisgICAgbGRUZ3RJZCA9IGlvX2luZm8tPmxkVGd0SWQ7CisgICAgaXNSZWFkID0gaW9faW5mby0+ aXNSZWFkOworCisgICAgbGQgPSBNUl9UYXJnZXRJZFRvTGRHZXQobGRUZ3RJZCwgbWFwKTsKKyAg ICByYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOworCisgICAgc3RyaXBTaXplID0gMSA8PCBy YWlkLT5zdHJpcGVTaGlmdDsKKyAgICBzdHJpcGVfbWFzayA9IHN0cmlwU2l6ZS0xOworICAgIC8q CisgICAgICogY2FsY3VsYXRlIHN0YXJ0aW5nIHJvdyBhbmQgc3RyaXBlLCBhbmQgbnVtYmVyIG9m IHN0cmlwcyBhbmQgcm93cworICAgICAqLworICAgIHN0YXJ0X3N0cmlwID0gbGRTdGFydEJsb2Nr ID4+IHJhaWQtPnN0cmlwZVNoaWZ0OworICAgIHJlZl9pbl9zdGFydF9zdHJpcGUgPSAodV9pbnQx Nl90KShsZFN0YXJ0QmxvY2sgJiBzdHJpcGVfbWFzayk7CisgICAgZW5kTGJhID0gbGRTdGFydEJs b2NrICsgbnVtQmxvY2tzIC0gMTsKKyAgICByZWZfaW5fZW5kX3N0cmlwZSA9ICh1X2ludDE2X3Qp KGVuZExiYSAmIHN0cmlwZV9tYXNrKTsKKyAgICBlbmRTdHJpcCA9IGVuZExiYSA+PiByYWlkLT5z dHJpcGVTaGlmdDsKKyAgICBudW1fc3RyaXBzID0gKHVfaW50OF90KShlbmRTdHJpcCAtIHN0YXJ0 X3N0cmlwICsgMSk7ICAgICAvLyBFbmQgc3RyaXAKKyAgICBpZiAocmFpZC0+cm93RGF0YVNpemUg PT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIHN0YXJ0X3JvdyA9IG1lZ2FfZGl2NjRf MzIoc3RhcnRfc3RyaXAsIHJhaWQtPnJvd0RhdGFTaXplKTsvLyBTdGFydCBSb3cKKyAgICBlbmRS b3cgPSBtZWdhX2RpdjY0XzMyKGVuZFN0cmlwLCByYWlkLT5yb3dEYXRhU2l6ZSk7CisgICAgbnVt Um93cyA9ICh1X2ludDhfdCkoZW5kUm93IC0gc3RhcnRfcm93ICsgMSk7ICAgLy8gZ2V0IHRoZSBy b3cgY291bnQKKworICAgIC8qCisgICAgICogQ2FsY3VsYXRlIHJlZ2lvbiBpbmZvLiAgKEFzc3Vt ZSByZWdpb24gYXQgc3RhcnQgb2YgZmlyc3Qgcm93LCBhbmQgCisgICAgICogYXNzdW1lIHRoaXMg SU8gbmVlZHMgdGhlIGZ1bGwgcm93IC0gd2lsbCBhZGp1c3QgaWYgbm90IHRydWUuKQorICAgICAq LworICAgIHJlZ1N0YXJ0ID0gc3RhcnRfcm93IDw8IHJhaWQtPnN0cmlwZVNoaWZ0OyAgCisgICAg cmVnU2l6ZSA9IHN0cmlwU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgLyogQ2hl Y2sgaWYgd2UgY2FuIHNlbmQgdGhpcyBJL08gdmlhIEZhc3RQYXRoICovCisgICAgaWYgKHJhaWQt PmNhcGFiaWxpdHkuZnBDYXBhYmxlKSB7CisgICAgICAgIGlmIChpc1JlYWQpCisgICAgICAgICAg ICBpb19pbmZvLT5mcE9rRm9ySW8gPSAocmFpZC0+Y2FwYWJpbGl0eS5mcFJlYWRDYXBhYmxlICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudW1fc3Ry aXBzID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhaWQtPmNhcGFiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZwUmVhZEFjcm9zc1N0cmlwZSkpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBpb19pbmZvLT5mcE9rRm9ySW8gPSAocmFpZC0+Y2FwYWJpbGl0eS5mcFdyaXRlQ2FwYWJs ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnVt X3N0cmlwcyA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByYWlkLT5jYXBhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcFdyaXRlQWNyb3NzU3RyaXBlKSk7CisgICAgfSAKKyAgICBlbHNl CisgICAgICAgIGlvX2luZm8tPmZwT2tGb3JJbyA9IEZBTFNFOworCisgICAgaWYgKG51bVJvd3Mg PT0gMSkgeworICAgICAgICBpZiAobnVtX3N0cmlwcyA9PSAxKSB7ICAKKyAgICAgICAgICAgIC8q IHNpbmdsZS1zdHJpcCBJT3MgY2FuIGFsd2F5cyBsb2NrIG9ubHkgdGhlIGRhdGEgbmVlZGVkLAor ICAgICAgICAgICAgICAgbXVsdGktc3RyaXAgSU9zIGFsd2F5cyBuZWVkIHRvIGZ1bGwgc3RyaXBl IGxvY2tlZCAqLyAKKyAgICAgICAgICAgIHJlZ1N0YXJ0ICs9IHJlZl9pbl9zdGFydF9zdHJpcGU7 CisgICAgICAgICAgICByZWdTaXplID0gbnVtQmxvY2tzOworICAgICAgICB9ICAKKyAgICB9IAor ICAgIGVsc2UgeworICAgICAgICAvKiBpZiB0aGUgc3RhcnQgc3RyaXAgaXMgdGhlIGxhc3QgaW4g dGhlIHN0YXJ0IHJvdyAqLworICAgICAgICBpZiAoc3RhcnRfc3RyaXAgPT0gKHN0YXJ0X3JvdyAr IDEpICogcmFpZC0+cm93RGF0YVNpemUgLSAxKSB7ICAKKyAgICAgICAgICAgIHJlZ1N0YXJ0ICs9 IHJlZl9pbl9zdGFydF9zdHJpcGU7CisgICAgICAgICAgICAvKiBpbml0aWFsaXplIGNvdW50IHRv IHNlY3RvcnMgZnJvbSBzdGFydFJlZiB0byBlbmQgb2Ygc3RyaXAgKi8KKyAgICAgICAgICAgIHJl Z1NpemUgPSBzdHJpcFNpemUgLSByZWZfaW5fc3RhcnRfc3RyaXBlOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKG51bVJvd3MgPiAyKQorICAgICAgICAgICAgcmVnU2l6ZSArPSAobnVtUm93cy0y KSA8PCByYWlkLT5zdHJpcGVTaGlmdDsgLy8gYWRkIGNvbXBsZXRlIHJvd3MgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBtaWRk bGUgb2YgdHJhbnNmZXIKKyAgICAgICAgLyogSWYgSU8gZW5kcyB3aXRoaW4gZmlyc3Qgc3RyaXAg b2YgbGFzdCByb3cgKi8KKyAgICAgICAgaWYgKGVuZFN0cmlwID09IGVuZFJvdypyYWlkLT5yb3dE YXRhU2l6ZSkgICAgIAorICAgICAgICAgICAgcmVnU2l6ZSArPSByZWZfaW5fZW5kX3N0cmlwZSsx OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWdTaXplICs9IHN0cmlwU2l6ZTsKKyAgICB9 CisgICAgcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlID0gbWFwLT5yYWlkTWFwLmZwUGRJb1Rp bWVvdXRTZWM7CisgICAgcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzID0gKGlzUmVhZCk/IFJF R0lPTl9UWVBFX1NIQVJFRF9SRUFEIDogcmFpZC0+cmVnVHlwZVJlcU9uV3JpdGU7CisgICAgcFJB SURfQ29udGV4dC0+VmlydHVhbERpc2tUZ3RJZCA9IHJhaWQtPnRhcmdldElkOworICAgIHBSQUlE X0NvbnRleHQtPnJlZ0xvY2tSb3dMQkEgPSByZWdTdGFydDsKKyAgICBwUkFJRF9Db250ZXh0LT5y ZWdMb2NrTGVuZ3RoID0gcmVnU2l6ZTsKKyAgICBwUkFJRF9Db250ZXh0LT5jb25maWdTZXFOdW0g PSByYWlkLT5zZXFOdW07CisKKyAgICAvKgorICAgICAqIEdldCBQaHkgUGFyYW1zIG9ubHkgaWYg RlAgY2FwYWJsZSwgb3IgZWxzZSBsZWF2ZSBpdCB0byBNUiBmaXJtd2FyZSAKKyAgICAgKiB0byBk byB0aGUgY2FsY3VsYXRpb24uCisgICAgICovCisgICAgaWYgKGlvX2luZm8tPmZwT2tGb3JJbykg eworICAgICAgICByZXR2YWwgPSBNUl9HZXRQaHlQYXJhbXMoc2MsIGxkLCBzdGFydF9zdHJpcCwg cmVmX2luX3N0YXJ0X3N0cmlwZSwgCisgICAgICAgICAgICAgICAgICZpb19pbmZvLT5wZEJsb2Nr LCAmaW9faW5mby0+ZGV2SGFuZGxlLCBwUkFJRF9Db250ZXh0LCBtYXApOworICAgICAgICAvKiBJ ZiBJTyBvbiBhbiBpbnZhbGlkIFBkLCB0aGVuIEZQIGlzIG5vdCBwb3NzaWJsZSAqLworICAgICAg ICBpZiAoaW9faW5mby0+ZGV2SGFuZGxlID09IE1SX1BEX0lOVkFMSUQpIAorICAgICAgICAgICAg aW9faW5mby0+ZnBPa0ZvcklvID0gRkFMU0U7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAg fSAKKyAgICBlbHNlIGlmIChpc1JlYWQpIHsKKyAgICAgICAgZm9yIChzdHJpcElkeD0wOyBzdHJp cElkeDxudW1fc3RyaXBzOyBzdHJpcElkeCsrKSB7CisgICAgICAgICAgICBpZiAoIU1SX0dldFBo eVBhcmFtcyhzYywgbGQsIHN0YXJ0X3N0cmlwICsgc3RyaXBJZHgsIAorICAgICAgICAgICAgICAg ICAgICByZWZfaW5fc3RhcnRfc3RyaXBlLCAmaW9faW5mby0+cGRCbG9jaywgCisgICAgICAgICAg ICAgICAgICAgICZpb19pbmZvLT5kZXZIYW5kbGUsIHBSQUlEX0NvbnRleHQsIG1hcCkpCisgICAg ICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRS VUU7Cit9CisKKy8qKgorICogbXJzYXNfdXBkYXRlX2xvYWRfYmFsYW5jZV9wYXJhbXM6ICBVcGRh dGUgbG9hZCBiYWxhbmNlIHBhcm1hcyAgCisgKiBJbnB1dHM6ICAgICAgICAgICAgICAgICAgICAg ICAgIG1hcCBwb2ludGVyIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Fk IGJhbGFuY2UgaW5mbyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9faW5m byBwb2ludGVyCisgKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBsb2FkIGJhbGFuY2Ug cGFyYW1ldGVycyBmb3IgdGhlIExEIGNvbmZpZworICogb2YgYSB0d28gZHJpdmUgb3B0aW1hbCBS QUlELTEuICAKKyAqLwordm9pZCBtcnNhc191cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhNUl9G V19SQUlEX01BUF9BTEwgKm1hcCwgCisgICAgICAgIFBMRF9MT0FEX0JBTEFOQ0VfSU5GTyBsYklu Zm8pCit7CisgICAgaW50IGxkQ291bnQ7CisgICAgdV9pbnQxNl90IGxkOworICAgIHVfaW50MzJf dCBwZCwgYXJSZWY7CisgICAgTVJfTERfUkFJRCAqcmFpZDsKKworICAgIGZvciAobGRDb3VudCA9 IDA7IGxkQ291bnQgPCBNQVhfTE9HSUNBTF9EUklWRVM7IGxkQ291bnQrKykKKyAgICB7CisgICAg ICAgIGxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGxkQ291bnQsIG1hcCk7CisgICAgICAgIGlmIChs ZCA+PSBNQVhfTE9HSUNBTF9EUklWRVMpIHsKKyAgICAgICAgICAgIGxiSW5mb1tsZENvdW50XS5s b2FkQmFsYW5jZUZsYWcgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor ICAgICAgICByYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOworCisgICAgICAgIC8qIFR3byBk cml2ZSBPcHRpbWFsIFJBSUQgMSAqLworICAgICAgICBpZiAoKHJhaWQtPmxldmVsID09IDEpICYm IChyYWlkLT5yb3dTaXplID09IDIpICYmIAorICAgICAgICAgICAgICAgIChyYWlkLT5zcGFuRGVw dGggPT0gMSkKKyAgICAgICAgICAgICAgICAmJiByYWlkLT5sZFN0YXRlID09IE1SX0xEX1NUQVRF X09QVElNQUwpIHsKKyAgICAgICAgICAgIGxiSW5mb1tsZENvdW50XS5sb2FkQmFsYW5jZUZsYWcg PSAxOworCisgICAgICAgICAgICAvKiBHZXQgdGhlIGFycmF5IG9uIHdoaWNoIHRoaXMgc3BhbiBp cyBwcmVzZW50ICovCisgICAgICAgICAgICBhclJlZiA9IE1SX0xkU3BhbkFycmF5R2V0KGxkLCAw LCBtYXApOyAgICAKKworICAgICAgICAgICAgLyogR2V0IHRoZSBQRCAqLworICAgICAgICAgICAg cGQgPSBNUl9BclBkR2V0KGFyUmVmLCAwLCBtYXApOyAgICAgIAorICAgICAgICAgICAgLyogR2V0 IGRldiBoYW5kbGUgZnJvbSBQRCAqLworICAgICAgICAgICAgbGJJbmZvW2xkQ291bnRdLnJhaWQx RGV2SGFuZGxlWzBdID0gTVJfUGREZXZIYW5kbGVHZXQocGQsIG1hcCk7ICAgICAgIAorICAgICAg ICAgICAgcGQgPSBNUl9BclBkR2V0KGFyUmVmLCAxLCBtYXApOyAgICAgCisgICAgICAgICAgICBs YkluZm9bbGRDb3VudF0ucmFpZDFEZXZIYW5kbGVbMV0gPSBNUl9QZERldkhhbmRsZUdldChwZCwg bWFwKTsgICAgICAgIAorICAgICAgICB9IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBsYklu Zm9bbGRDb3VudF0ubG9hZEJhbGFuY2VGbGFnID0gMDsKKyAgICB9Cit9CisKKworLyoqCisgKiBt cnNhc19zZXRfcGRfbGJhOiAgICBTZXRzIFBEIExCQQorICogaW5wdXQ6ICAgICAgICAgICAgICAg aW9fcmVxdWVzdCBwb2ludGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBDREIgbGVuZ3RoCisg KiAgICAgICAgICAgICAgICAgICAgICBpb19pbmZvIHBvaW50ZXIKKyAqICAgICAgICAgICAgICAg ICAgICAgIFBvaW50ZXIgdG8gQ0NCCisgKiAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBSQUlE IG1hcCBwb2ludGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBTdGFydCBibG9jayBvZiBJTwor ICogICAgICAgICAgICAgICAgICAgICAgQmxvY2sgU2l6ZQorICoKKyAqIFVzZWQgdG8gc2V0IHRo ZSBQRCBsb2dpY2FsIGJsb2NrIGFkZHJlc3MgaW4gQ0RCIGZvciBGUCBJT3MuCisgKi8KK3ZvaWQg bXJzYXNfc2V0X3BkX2xiYShNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCwg dV9pbnQ4X3QgY2RiX2xlbiwKKyAgICBzdHJ1Y3QgSU9fUkVRVUVTVF9JTkZPICppb19pbmZvLCB1 bmlvbiBjY2IgKmNjYiwKKyAgICBNUl9GV19SQUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVf aW50MzJfdCByZWZfdGFnLAorICAgIHVfaW50MzJfdCBsZF9ibG9ja19zaXplKQoreworICAgIE1S X0xEX1JBSUQgKnJhaWQ7CisgICAgdV9pbnQzMl90IGxkOworICAgIHVfaW50NjRfdCBzdGFydF9i bGsgPSBpb19pbmZvLT5wZEJsb2NrOworICAgIHVfaW50OF90ICpjZGIgPSBpb19yZXF1ZXN0LT5D REIuQ0RCMzI7CisgICAgdV9pbnQzMl90IG51bV9ibG9ja3MgPSBpb19pbmZvLT5udW1CbG9ja3M7 CisgICAgdV9pbnQ4X3Qgb3Bjb2RlID0gMCwgZmxhZ3ZhbHMgPSAwLCBncm91cG51bSA9IDAsIGNv bnRyb2wgPSAwOworICAgIHN0cnVjdCBjY2JfaGRyICpjY2JfaCA9ICYoY2NiLT5jY2JfaCk7CisK KyAgICAvKiBDaGVjayBpZiBUMTAgUEkgKERJRikgaXMgZW5hYmxlZCBmb3IgdGhpcyBMRCAqLwor ICAgIGxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGlvX2luZm8tPmxkVGd0SWQsIGxvY2FsX21hcF9w dHIpOworICAgIHJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIGxvY2FsX21hcF9wdHIpOworICAgIGlm IChyYWlkLT5jYXBhYmlsaXR5LmxkUGlNb2RlID09IE1SX1BST1RfSU5GT19UWVBFX0NPTlRST0xM RVIpIHsKKyAgICAgICAgbWVtc2V0KGNkYiwgMCwgc2l6ZW9mKGlvX3JlcXVlc3QtPkNEQi5DREIz MikpOworICAgICAgICBjZGJbMF0gPSAgTVJTQVNfU0NTSV9WQVJJQUJMRV9MRU5HVEhfQ01EOwor ICAgICAgICBjZGJbN10gPSAgTVJTQVNfU0NTSV9BRERMX0NEQl9MRU47CisKKyAgICAgICAgaWYg KGNjYl9oLT5mbGFncyA9PSBDQU1fRElSX09VVCkKKyAgICAgICAgICAgIGNkYls5XSA9IE1SU0FT X1NDU0lfU0VSVklDRV9BQ1RJT05fUkVBRDMyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj ZGJbOV0gPSBNUlNBU19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1dSSVRFMzI7CisgICAgICAgIGNkYlsx MF0gPSBNUlNBU19SRF9XUl9QUk9URUNUX0NIRUNLX0FMTDsKKworICAgICAgICAvKiBMQkEgKi8K KyAgICAgICAgY2RiWzEyXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA1NikgJiAweGZmKTsK KyAgICAgICAgY2RiWzEzXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA0OCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE0XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA0MCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE1XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAzMikgJiAweGZmKTsK KyAgICAgICAgY2RiWzE2XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE3XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmKTsK KyAgICAgICAgY2RiWzE4XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOwor ICAgICAgICBjZGJbMTldID0gKHVfaW50OF90KShzdGFydF9ibGsgJiAweGZmKTsKKworICAgICAg ICAvKiBMb2dpY2FsIGJsb2NrIHJlZmVyZW5jZSB0YWcgKi8KKyAgICAgICAgaW9fcmVxdWVzdC0+ Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0gc3dhcDMyKHJlZl90YWcpOworICAgICAg ICBpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAweGZm ZmY7CisgICAgICAgIGlvX3JlcXVlc3QtPklvRmxhZ3MgPSAzMjsgLyogU3BlY2lmeSAzMi1ieXRl IGNkYiAqLworCisgICAgICAgIC8qIFRyYW5zZmVyIGxlbmd0aCAqLworICAgICAgICBjZGJbMjhd ID0gKHVfaW50OF90KSgobnVtX2Jsb2NrcyA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgY2RiWzI5 XSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGNkYlsz MF0gPSAodV9pbnQ4X3QpKChudW1fYmxvY2tzID4+IDgpICYgMHhmZik7CisgICAgICAgIGNkYlsz MV0gPSAodV9pbnQ4X3QpKG51bV9ibG9ja3MgJiAweGZmKTsKKworICAgICAgICAvKiBzZXQgU0NT SSBJTyBFRURQIEZsYWdzICovCisgICAgICAgIGlmIChjY2JfaC0+ZmxhZ3MgPT0gQ0FNX0RJUl9P VVQpIHsKKyAgICAgICAgICAgIGlvX3JlcXVlc3QtPkVFRFBGbGFncyA9CisgICAgICAgICAgICAg ICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHICB8CisgICAgICAgICAgICAg ICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFRlRBRyB8CisgICAgICAgICAgICAgICAg TVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9PUCB8CisgICAgICAgICAgICAgICAg TVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0FQUFRBRyB8CisgICAgICAgICAgICAgICAgTVBJ Ml9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0dVQVJEOworICAgICAgICB9IAorICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICAgICBpb19yZXF1ZXN0LT5FRURQRmxhZ3MgPQorICAgICAgICAgICAg ICAgICAgICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHIHwKKyAgICAgICAg ICAgICAgICAgICAgIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTlNFUlRfT1A7CisgICAgICAgIH0K KyAgICAgICAgaW9fcmVxdWVzdC0+Q29udHJvbCB8PSAoMHg0IDw8IDI2KTsKKyAgICAgICAgaW9f cmVxdWVzdC0+RUVEUEJsb2NrU2l6ZSA9IGxkX2Jsb2NrX3NpemU7CisgICAgfSAKKyAgICBlbHNl IHsKKyAgICAgICAgLyogU29tZSBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCAxNi8xMiBieXRlIENEQidz LCBjb252ZXJ0IHRvIDEwICovCisgICAgICAgIGlmICgoKGNkYl9sZW4gPT0gMTIpIHx8IChjZGJf bGVuID09IDE2KSkgJiYgCisgICAgICAgICAgICAgICAgICAgIChzdGFydF9ibGsgPD0gMHhmZmZm ZmZmZikpIHsKKyAgICAgICAgICAgIGlmIChjZGJfbGVuID09IDE2KSB7CisgICAgICAgICAgICAg ICAgb3Bjb2RlID0gY2RiWzBdID09IFJFQURfMTYgPyBSRUFEXzEwIDogV1JJVEVfMTA7CisgICAg ICAgICAgICAgICAgZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgZ3JvdXBudW0g PSBjZGJbMTRdOworICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBjZGJbMTVdOworICAgICAgICAg ICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9wY29kZSA9IGNkYlsw XSA9PSBSRUFEXzEyID8gUkVBRF8xMCA6IFdSSVRFXzEwOworICAgICAgICAgICAgICAgIGZsYWd2 YWxzID0gY2RiWzFdOworICAgICAgICAgICAgICAgIGdyb3VwbnVtID0gY2RiWzEwXTsKKyAgICAg ICAgICAgICAgICBjb250cm9sID0gY2RiWzExXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgbWVtc2V0KGNkYiwgMCwgc2l6ZW9mKGlvX3JlcXVlc3QtPkNEQi5DREIzMikpOworCisgICAg ICAgICAgICBjZGJbMF0gPSBvcGNvZGU7CisgICAgICAgICAgICBjZGJbMV0gPSBmbGFndmFsczsK KyAgICAgICAgICAgIGNkYls2XSA9IGdyb3VwbnVtOworICAgICAgICAgICAgY2RiWzldID0gY29u dHJvbDsKKworICAgICAgICAgICAgLyogVHJhbnNmZXIgbGVuZ3RoICovCisgICAgICAgICAgICBj ZGJbOF0gPSAodV9pbnQ4X3QpKG51bV9ibG9ja3MgJiAweGZmKTsKKyAgICAgICAgICAgIGNkYls3 XSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKworICAgICAgICAgICAg aW9fcmVxdWVzdC0+SW9GbGFncyA9IDEwOyAvKiBTcGVjaWZ5IDEwLWJ5dGUgY2RiICovCisgICAg ICAgICAgICBjZGJfbGVuID0gMTA7CisgICAgICAgIH0gZWxzZSBpZiAoKGNkYl9sZW4gPCAxNikg JiYgKHN0YXJ0X2JsayA+IDB4ZmZmZmZmZmYpKSB7CisgICAgICAgICAgICAvKiBDb252ZXJ0IHRv IDE2IGJ5dGUgQ0RCIGZvciBsYXJnZSBMQkEncyAqLworICAgICAgICAgICAgc3dpdGNoIChjZGJf bGVuKSB7CisgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICAgICBvcGNv ZGUgPSBjZGJbMF0gPT0gUkVBRF82ID8gUkVBRF8xNiA6IFdSSVRFXzE2OworICAgICAgICAgICAg ICAgICAgICBjb250cm9sID0gY2RiWzVdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBjZGJb MF0gPT0gUkVBRF8xMCA/IFJFQURfMTYgOiBXUklURV8xNjsKKyAgICAgICAgICAgICAgICAgICAg ZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgICAgIGdyb3VwbnVtID0gY2RiWzZd OworICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gY2RiWzldOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgICAgICAg ICBvcGNvZGUgPSBjZGJbMF0gPT0gUkVBRF8xMiA/IFJFQURfMTYgOiBXUklURV8xNjsKKyAgICAg ICAgICAgICAgICAgICAgZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgICAgIGdy b3VwbnVtID0gY2RiWzEwXTsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGNkYlsxMV07 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBtZW1zZXQoY2RiLCAwLCBzaXplb2YoaW9fcmVxdWVzdC0+Q0RCLkNEQjMyKSk7CisKKyAgICAg ICAgICAgIGNkYlswXSA9IG9wY29kZTsKKyAgICAgICAgICAgIGNkYlsxXSA9IGZsYWd2YWxzOwor ICAgICAgICAgICAgY2RiWzE0XSA9IGdyb3VwbnVtOworICAgICAgICAgICAgY2RiWzE1XSA9IGNv bnRyb2w7CisKKyAgICAgICAgICAgIC8qIFRyYW5zZmVyIGxlbmd0aCAqLworICAgICAgICAgICAg Y2RiWzEzXSA9ICh1X2ludDhfdCkobnVtX2Jsb2NrcyAmIDB4ZmYpOworICAgICAgICAgICAgY2Ri WzEyXSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICAg IGNkYlsxMV0gPSAodV9pbnQ4X3QpKChudW1fYmxvY2tzID4+IDE2KSAmIDB4ZmYpOworICAgICAg ICAgICAgY2RiWzEwXSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gMjQpICYgMHhmZik7CisK KyAgICAgICAgICAgIGlvX3JlcXVlc3QtPklvRmxhZ3MgPSAxNjsgLyogU3BlY2lmeSAxNi1ieXRl IGNkYiAqLworICAgICAgICAgICAgY2RiX2xlbiA9IDE2OworICAgICAgICB9IGVsc2UgaWYgKChj ZGJfbGVuID09IDYpICYmIChzdGFydF9ibGsgPiAweDFmZmZmZikpIHsKKyAgICAgICAgICAgIC8q IGNvbnZlcnQgdG8gMTAgYnl0ZSBDREIgKi8KKwkgICAgb3Bjb2RlID0gY2RiWzBdID09IFJFQURf NiA/IFJFQURfMTAgOiBXUklURV8xMDsKKwkgICAgY29udHJvbCA9IGNkYls1XTsKKwkJCisJICAg IG1lbXNldChjZGIsIDAsIHNpemVvZihjZGIpKTsKKwkgICAgY2RiWzBdID0gb3Bjb2RlOworCSAg ICBjZGJbOV0gPSBjb250cm9sOworCisJICAgIC8qIFNldCB0cmFuc2ZlciBsZW5ndGggKi8KKwkg ICAgY2RiWzhdID0gKHVfaW50OF90KShudW1fYmxvY2tzICYgMHhmZik7CisJICAgIGNkYls3XSA9 ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKworCSAgICAvKiBTcGVjaWZ5 IDEwLWJ5dGUgY2RiICovCisJICAgIGNkYl9sZW4gPSAxMDsKKwl9CisKKyAgICAgICAgLyogRmFs bCB0aHJvdWdoIG5vcm1hbCBjYXNlLCBqdXN0IGxvYWQgTEJBIGhlcmUgKi8KKyAgICAgICAgc3dp dGNoIChjZGJfbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgdV9pbnQ4X3QgdmFsID0gY2RiWzFdICYgMHhFMDsKKyAgICAg ICAgICAgICAgICBjZGJbM10gPSAodV9pbnQ4X3QpKHN0YXJ0X2JsayAmIDB4ZmYpOworICAgICAg ICAgICAgICAgIGNkYlsyXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOwor ICAgICAgICAgICAgICAgIGNkYlsxXSA9IHZhbCB8ICgodV9pbnQ4X3QpKHN0YXJ0X2JsayA+PiAx NikgJiAweDFmKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgY2RiWzVdID0gKHVfaW50OF90KShzdGFy dF9ibGsgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbNF0gPSAodV9pbnQ4X3QpKChzdGFy dF9ibGsgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbM10gPSAodV9pbnQ4X3Qp KChzdGFydF9ibGsgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2RiWzJdID0gKHVf aW50OF90KSgoc3RhcnRfYmxrID4+IDI0KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICBjZGJbNV0gPSAodV9pbnQ4 X3QpKHN0YXJ0X2JsayAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYls0XSA9ICh1X2ludDhf dCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYlszXSA9ICh1 X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJb Ml0gPSAodV9pbnQ4X3QpKChzdGFydF9ibGsgPj4gMjQpICYgMHhmZik7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgICAgIGNkYls5XSA9 ICh1X2ludDhfdCkoc3RhcnRfYmxrICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2RiWzhdID0g KHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2Ri WzddID0gKHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAg ICAgIGNkYls2XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmKTsKKyAgICAg ICAgICAgICAgICBjZGJbNV0gPSAodV9pbnQ4X3QpKChzdGFydF9ibGsgPj4gMzIpICYgMHhmZik7 CisgICAgICAgICAgICAgICAgY2RiWzRdID0gKHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDQwKSAm IDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYlszXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+ PiA0OCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbMl0gPSAodV9pbnQ4X3QpKChzdGFy dF9ibGsgPj4gNTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X2Jlc3RfYXJtICAgICAgICAgRGV0ZXJtaW5l IHRoZSBiZXN0IHNwaW5kbGUgYXJtICAKKyAqIElucHV0czogICAgICAgICAgICAgICAgICAgIExv YWQgYmFsYW5jZSBpbmZvIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmV0 dXJucyB0aGUgYmVzdCBhcm0gYnkgbG9va2luZyBhdCB0aGUKKyAqIHBhcmFtZXRlcnMgb2YgdGhl IGxhc3QgUEQgYWNjZXNzLgorICovCit1X2ludDhfdCBtcnNhc19nZXRfYmVzdF9hcm0oUExEX0xP QURfQkFMQU5DRV9JTkZPIGxiSW5mbywgdV9pbnQ4X3QgYXJtLCAKKyAgICAgICAgdV9pbnQ2NF90 IGJsb2NrLCB1X2ludDMyX3QgY291bnQpCit7CisgICAgdV9pbnQxNl90ICAgICBwZW5kMCwgcGVu ZDE7CisgICAgdV9pbnQ2NF90ICAgICBkaWZmMCwgZGlmZjE7CisgICAgdV9pbnQ4X3QgICAgICBi ZXN0QXJtOworCisgICAgLyogZ2V0IHRoZSBwZW5kaW5nIGNtZHMgZm9yIHRoZSBkYXRhIGFuZCBt aXJyb3IgYXJtcyAqLworICAgIHBlbmQwID0gYXRvbWljX3JlYWQoJmxiSW5mby0+c2NzaV9wZW5k aW5nX2NtZHNbMF0pOworICAgIHBlbmQxID0gYXRvbWljX3JlYWQoJmxiSW5mby0+c2NzaV9wZW5k aW5nX2NtZHNbMV0pOworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBkaXNrIHdob3NlIGhlYWQgaXMg bmVhcmVyIHRvIHRoZSByZXEuIGJsb2NrICovCisgICAgZGlmZjAgPSBBQlNfRElGRihibG9jaywg bGJJbmZvLT5sYXN0X2FjY2Vzc2VkX2Jsb2NrWzBdKTsKKyAgICBkaWZmMSA9IEFCU19ESUZGKGJs b2NrLCBsYkluZm8tPmxhc3RfYWNjZXNzZWRfYmxvY2tbMV0pOworICAgIGJlc3RBcm0gPSAoZGlm ZjAgPD0gZGlmZjEgPyAwIDogMSk7CisKKyAgICBpZiAoKGJlc3RBcm0gPT0gYXJtICYmIHBlbmQw ID4gcGVuZDEgKyAxNikgfHwgKGJlc3RBcm0gIT0gYXJtICYmIHBlbmQxID4gcGVuZDAgKyAxNikp CisgICAgICAgIGJlc3RBcm0gXj0gMTsKKworICAgIC8qIFVwZGF0ZSB0aGUgbGFzdCBhY2Nlc3Nl ZCBibG9jayBvbiB0aGUgY29ycmVjdCBwZCAqLworICAgIGxiSW5mby0+bGFzdF9hY2Nlc3NlZF9i bG9ja1tiZXN0QXJtXSA9IGJsb2NrICsgY291bnQgLSAxOworCisgICAgcmV0dXJuIGJlc3RBcm07 Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3VwZGF0ZWRfZGV2X2hhbmRsZSAgICBHZXQgdGhlIHVw ZGF0ZSBkZXYgaGFuZGxlICAKKyAqIElucHV0czogICAgICAgICAgICAgICAgICAgICAgICAgTG9h ZCBiYWxhbmNlIGluZm8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2lu Zm8gcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB0 aGUgdXBkYXRlZCBkZXYgaGFuZGxlLgorICovCit1X2ludDE2X3QgbXJzYXNfZ2V0X3VwZGF0ZWRf ZGV2X2hhbmRsZShQTERfTE9BRF9CQUxBTkNFX0lORk8gbGJJbmZvLCAKKyAgICAgICAgc3RydWN0 IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbykKK3sKKyAgICB1X2ludDhfdCBhcm0sIG9sZF9hcm07 CisgICAgdV9pbnQxNl90IGRldkhhbmRsZTsKKworICAgIG9sZF9hcm0gPSBsYkluZm8tPnJhaWQx RGV2SGFuZGxlWzBdID09IGlvX2luZm8tPmRldkhhbmRsZSA/IDAgOiAxOworCisgICAgLyogZ2V0 IGJlc3QgbmV3IGFybSAqLworICAgIGFybSAgPSBtcnNhc19nZXRfYmVzdF9hcm0obGJJbmZvLCBv bGRfYXJtLCBpb19pbmZvLT5sZFN0YXJ0QmxvY2ssIGlvX2luZm8tPm51bUJsb2Nrcyk7CisgICAg ZGV2SGFuZGxlID0gbGJJbmZvLT5yYWlkMURldkhhbmRsZVthcm1dOworICAgIGF0b21pY19pbmMo JmxiSW5mby0+c2NzaV9wZW5kaW5nX2NtZHNbYXJtXSk7CisKKyAgICByZXR1cm4gZGV2SGFuZGxl OworfQorCisvKioKKyAqIE1SX0dldFBoeVBhcmFtcyAgICAgQ2FsY3VsYXRlcyBhcm0sIHNwYW4s IGFuZCBibG9jaworICogSW5wdXRzOiAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQg c3RhdGUgCisgKiAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWwgZHJpdmUgbnVtYmVyIChMRCkg CisgKiAgICAgICAgICAgICAgICAgICAgIFN0cmlwZSBudW1iZXIgKHN0cmlwUm93KQorICogICAg ICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgaW4gc3RyaXBlIChzdHJpcFJlZikKKyAqIE91dHB1 dHM6ICAgICAgICAgICAgU3BhbiBudW1iZXIKKyAqICAgICAgICAgICAgICAgICAgICAgQWJzb2x1 dGUgQmxvY2sgbnVtYmVyIGluIHRoZSBwaHlzaWNhbCBkaXNrIAorICoKKyAqIFRoaXMgcm91dGlu ZSBjYWxjdWxhdGVzIHRoZSBhcm0sIHNwYW4gYW5kIGJsb2NrIGZvciB0aGUgc3BlY2lmaWVkIHN0 cmlwZQorICogYW5kIHJlZmVyZW5jZSBpbiBzdHJpcGUuCisgKi8KK3VfaW50OF90IE1SX0dldFBo eVBhcmFtcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3QgbGQsIAorICAgICAgICAg ICAgdV9pbnQ2NF90IHN0cmlwUm93LAorICAgICAgICAgICAgdV9pbnQxNl90IHN0cmlwUmVmLCB1 X2ludDY0X3QgKnBkQmxvY2ssIHVfaW50MTZfdCAqcERldkhhbmRsZSwKKyAgICAgICAgICAgIFJB SURfQ09OVEVYVCAqcFJBSURfQ29udGV4dCwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7Cisg ICAgTVJfTERfUkFJRCAgKnJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIG1hcCk7CisgICAgdV9pbnQz Ml90IHBkLCBhclJlZjsKKyAgICB1X2ludDhfdCBwaHlzQXJtLCBzcGFuOworICAgIHVfaW50NjRf dCByb3c7CisgICAgdV9pbnQ4X3QgcmV0dmFsID0gVFJVRTsKKyAgICBpbnQgZXJyb3JfY29kZSA9 IDA7CisgICAgdV9pbnQzMl90IHJvd01vZCwgYXJtUSwgYXJtLCBsb2dBcm07CisKKyAgICByb3cg PSAgbWVnYV9kaXY2NF8zMihzdHJpcFJvdywgcmFpZC0+cm93RGF0YVNpemUpOworCisgICAgaWYg KHJhaWQtPmxldmVsID09IDYpIHsKKyAgICAgICAgbG9nQXJtID0gbWVnYV9tb2Q2NChzdHJpcFJv dywgcmFpZC0+cm93RGF0YVNpemUpOyAvLyBsb2dpY2FsIGFybSB3aXRoaW4gcm93CisgICAgICAg IGlmIChyYWlkLT5yb3dTaXplID09IDApCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg ICAgIHJvd01vZCA9IG1lZ2FfbW9kNjQocm93LCByYWlkLT5yb3dTaXplKTsgIC8vIGdldCBsb2dp Y2FsIHJvdyBtb2QKKyAgICAgICAgYXJtUSA9IHJhaWQtPnJvd1NpemUtMS1yb3dNb2Q7ICAvLyBp bmRleCBvZiBRIGRyaXZlCisgICAgICAgIGFybSA9IGFybVErMStsb2dBcm07ICAgIC8vIGRhdGEg YWx3YXlzIGxvZ2ljYWxseSBmb2xsb3dzIFEKKyAgICAgICAgaWYgKGFybSA+PSByYWlkLT5yb3dT aXplKSAgICAgICAgIC8vIGhhbmRsZSB3cmFwIGNvbmRpdGlvbgorICAgICAgICAgICAgYXJtIC09 IHJhaWQtPnJvd1NpemU7CisgICAgICAgIHBoeXNBcm0gPSAodV9pbnQ4X3QpYXJtOworICAgIH0g CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyYWlkLT5tb2RGYWN0b3IgPT0gMCkKKyAgICAgICAg ICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcGh5c0FybSA9IE1SX0xkRGF0YUFybUdldChsZCwg bWVnYV9tb2Q2NChzdHJpcFJvdywgcmFpZC0+bW9kRmFjdG9yKSwgbWFwKTsKKyAgICB9CisKKyAg ICBpZiAocmFpZC0+c3BhbkRlcHRoID09IDEpIHsKKyAgICAgICAgc3BhbiA9IDA7CisgICAgICAg ICpwZEJsb2NrID0gcm93IDw8IHJhaWQtPnN0cmlwZVNoaWZ0OworICAgIH0gCisgICAgZWxzZSB7 CisgICAgICAgIHNwYW4gPSAodV9pbnQ4X3QpTVJfR2V0U3BhbkJsb2NrKGxkLCByb3csIHBkQmxv Y2ssIG1hcCwgJmVycm9yX2NvZGUpOworICAgICAgICBpZiAoZXJyb3JfY29kZSA9PSAxKQorICAg ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8qICBHZXQgdGhlIGFycmF5IG9u IHdoaWNoIHRoaXMgc3BhbiBpcyBwcmVzZW50ICovCisgICAgYXJSZWYgPSBNUl9MZFNwYW5BcnJh eUdldChsZCwgc3BhbiwgbWFwKTsgCisKKyAgICBwZCA9IE1SX0FyUGRHZXQoYXJSZWYsIHBoeXNB cm0sIG1hcCk7ICAgICAvLyBHZXQgdGhlIFBkLgorCisgICAgaWYgKHBkICE9IE1SX1BEX0lOVkFM SUQpCisgICAgICAgICpwRGV2SGFuZGxlID0gTVJfUGREZXZIYW5kbGVHZXQocGQsIG1hcCk7ICAv LyBHZXQgZGV2IGhhbmRsZSBmcm9tIFBkLgorICAgIGVsc2UgeworICAgICAgICAqcERldkhhbmRs ZSA9IE1SX1BEX0lOVkFMSUQ7IC8vIHNldCBkZXYgaGFuZGxlIGFzIGludmFsaWQuCisgICAgICAg IGlmICgocmFpZC0+bGV2ZWwgPj0gNSkgJiYKKyAgICAgICAgICAgICgoc2MtPmRldmljZV9pZCAh PSBNUlNBU19JTlZBREVSKSB8fAorICAgICAgICAgICAgKHNjLT5kZXZpY2VfaWQgPT0gTVJTQVNf SU5WQURFUiAmJgorICAgICAgICAgICAgIHJhaWQtPnJlZ1R5cGVSZXFPblJlYWQgIT0gUkVHSU9O X1RZUEVfVU5VU0VEKSkpCisgICAgICAgICAgICAgcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdz ID0gUkVHSU9OX1RZUEVfRVhDTFVTSVZFOworICAgICAgICBlbHNlIGlmIChyYWlkLT5sZXZlbCA9 PSAxKSB7CisgICAgICAgICAgICBwZCA9IE1SX0FyUGRHZXQoYXJSZWYsIHBoeXNBcm0gKyAxLCBt YXApOyAvLyBHZXQgQWx0ZXJuYXRlIFBkLgorICAgICAgICAgICAgaWYgKHBkICE9IE1SX1BEX0lO VkFMSUQpCisgICAgICAgICAgICAgICAgKnBEZXZIYW5kbGUgPSBNUl9QZERldkhhbmRsZUdldChw ZCwgbWFwKTsvL0dldCBkZXYgaGFuZGxlIGZyb20gUGQuCisgICAgICAgIH0KKyAgICB9CisKKyAg ICAqcGRCbG9jayArPSBzdHJpcFJlZiArIE1SX0xkU3BhblB0ckdldChsZCwgc3BhbiwgbWFwKS0+ c3RhcnRCbGs7CisgICAgcFJBSURfQ29udGV4dC0+c3BhbkFybSA9IChzcGFuIDw8IFJBSURfQ1RY X1NQQU5BUk1fU1BBTl9TSElGVCkgfCBwaHlzQXJtOworICAgIHJldHVybiByZXR2YWw7Cit9CisK Ky8qKgorICogTVJfR2V0U3BhbkJsb2NrICAgICBDYWxjdWxhdGVzIHNwYW4gYmxvY2sKKyAqIElu cHV0czogICAgICAgICAgICAgTEQgCisgKiAgICAgICAgICAgICAgICAgICAgIHJvdworICogICAg ICAgICAgICAgICAgICAgICBQRCBzcGFuIGJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgIFJB SUQgbWFwIHBvaW50ZXIKKyAqIE91dHB1dHM6ICAgICAgICAgICAgU3BhbiBudW1iZXIKKyAqICAg ICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZSAKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FsY3Vs YXRlcyB0aGUgc3BhbiBmcm9tIHRoZSBzcGFuIGJsb2NrIGluZm8uICAKKyAqLwordV9pbnQzMl90 IE1SX0dldFNwYW5CbG9jayh1X2ludDMyX3QgbGQsIHVfaW50NjRfdCByb3csIHVfaW50NjRfdCAq c3Bhbl9ibGssIAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwgaW50ICpkaXZfZXJy b3IpCit7CisgICAgTVJfU1BBTl9CTE9DS19JTkZPICpwU3BhbkJsb2NrID0gTVJfTGRTcGFuSW5m b0dldChsZCwgbWFwKTsKKyAgICBNUl9RVUFEX0VMRU1FTlQgKnF1YWQ7CisgICAgTVJfTERfUkFJ RCAqcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbWFwKTsKKyAgICB1X2ludDMyX3Qgc3BhbiwgajsK KyAgICB1X2ludDY0X3QgYmxrLCBkZWJ1Z0JsazsKKworICAgIGZvciAoc3Bhbj0wOyBzcGFuIDwg cmFpZC0+c3BhbkRlcHRoOyBzcGFuKyssIHBTcGFuQmxvY2srKykgeworICAgICAgICBmb3IgKGo9 MDsgaiA8IHBTcGFuQmxvY2stPmJsb2NrX3NwYW5faW5mby5ub0VsZW1lbnRzOyBqKyspIHsKKyAg ICAgICAgICAgIHF1YWQgPSAmcFNwYW5CbG9jay0+YmxvY2tfc3Bhbl9pbmZvLnF1YWRbal07Cisg ICAgICAgICAgICBpZiAocXVhZC0+ZGlmZiA9PSAwKSB7CisgICAgICAgICAgICAgICAgKmRpdl9l cnJvciA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwYW47CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAocXVhZC0+bG9nU3RhcnQgPD0gcm93ICAmJiAgcm93IDw9IHF1YWQtPmxv Z0VuZCAgJiYgIAorICAgICAgICAgICAgICAgICAgICAobWVnYV9tb2Q2NChyb3ctcXVhZC0+bG9n U3RhcnQsIHF1YWQtPmRpZmYpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwYW5fYmxr ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgYmxrID0gIG1lZ2FfZGl2NjRfMzIoKHJv dy1xdWFkLT5sb2dTdGFydCksIHF1YWQtPmRpZmYpOworICAgICAgICAgICAgICAgICAgICBkZWJ1 Z0JsayA9IGJsazsKKyAgICAgICAgICAgICAgICAgICAgYmxrID0gKGJsayArIHF1YWQtPm9mZnNl dEluU3BhbikgPDwgcmFpZC0+c3RyaXBlU2hpZnQ7CisgICAgICAgICAgICAgICAgICAgICpzcGFu X2JsayA9IGJsazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNw YW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNwYW47Cit9 CisKSW5kZXg6IHN5cy9kZXYvbXJzYXMvbXJzYXNfaW9jdGwuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv ZGV2L21yc2FzL21yc2FzX2lvY3RsLmMJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L21yc2FzL21y c2FzX2lvY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTMsIExTSSBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1 dGhvcjogTWFyaWFuIENob3kKKyAqIFN1cHBvcnQ6IGZyZWVic2RyYWlkQGxzaS5jb20KKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPE9SR0FOSVpBVElP Tj4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlS SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29m dHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQg c2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBv bGljaWVzLGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgdGhlIEZyZWVCU0QgUHJvamVj dC4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRmYnNkQGxzaS5jb20+CisgKiBN YWlsIHRvOiBMU0kgQ29ycG9yYXRpb24sIDE2MjEgQmFyYmVyIExhbmUsIE1pbHBpdGFzLCBDQSA5 NTAzNQorICogICAgQVRUTjogTWVnYVJhaWQgRnJlZUJTRAorICoKKyAqLworCisKKyNpbmNsdWRl IDxkZXYvbXJzYXMvbXJzYXMuaD4KKyNpbmNsdWRlIDxkZXYvbXJzYXMvbXJzYXNfaW9jdGwuaD4K KworCisvKiAKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMgCisgKi8KK2ludCBtcnNhc19hbGxvY19t ZmlfY21kcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2ludCBtcnNhc19wYXNzdGhydShzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCB2b2lkICphcmcpOwordm9pZCBtcnNhc19mcmVlX2lvY19jbWQo c3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfZnJhbWUoc3RydWN0IG1y c2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7Cit2b2lkIG1yc2FzX2R1 bXBfZGNtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSog ZGNtZCk7Cit2b2lkIG1yc2FzX2R1bXBfaW9jdGwoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3Ry dWN0IG1yc2FzX2lvY3BhY2tldCAqdXNlcl9pb2MpOwordm9pZCAqIG1yc2FzX2FsbG9jX2ZyYW1l KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpOworc3Rh dGljIGludCBtcnNhc19jcmVhdGVfZnJhbWVfcG9vbChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsK K3N0YXRpYyB2b2lkIG1yc2FzX2FsbG9jX2NiKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3Qg KnNlZ3MsCisgICAgICAgIGludCBuc2VncywgaW50IGVycm9yKTsKKworZXh0ZXJuIHN0cnVjdCBt cnNhc19tZmlfY21kKiBtcnNhc19nZXRfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsK K2V4dGVybiB2b2lkIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAq Y21kKTsKK2V4dGVybiBpbnQgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc3RydWN0IG1yc2FzX3Nv ZnRjICpzYywKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKTsKKworCisvKioKKyAqIG1y c2FzX2R1bXBfaW9jdGw6ICAgICAgIFByaW50IGRlYnVnIG91dHB1dCBmb3IgRENNRHMgCisgKiBp bnB1dDogICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgIERDTUQgZnJhbWUgc3RydWN0dXJlCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBtcnNhc19wYXNzdGhydSgpIHRvIHByaW50IG91dCBkZWJ1 ZyBpbmZvcm1hdGlvbgorICogaW4gdGhlIGhhbmRsaW5nIGFuZCByb3V0aW5nIG9mIERDTUQgY29t bWFuZHMuCisgKi8KK3ZvaWQgbXJzYXNfZHVtcF9kY21kKCBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj LCBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSogZGNtZCApCit7CisgICAgaW50IGk7CisKKyAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5jbWQ6ICAgICAgICAgICAweCUwMmho eFxuIiwgZGNtZC0+Y21kKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21k LT5jbWRfc3RhdHVzOiAgICAweCUwMmhoeFxuIiwgZGNtZC0+Y21kX3N0YXR1cyk7CisgICAgZGV2 aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+c2dlX2NvdW50OiAgICAgMHglMDJoaHhc biIsIGRjbWQtPnNnZV9jb3VudCk7CisgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ZGNtZC0+Y29udGV4dDogICAgICAgMHglMDh4XG4iLCBkY21kLT5jb250ZXh0KTsKKyAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5mbGFnczogICAgICAgICAweCUwNGh4XG4i LCBkY21kLT5mbGFncyk7CisgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+ dGltZW91dDogICAgICAgMHglMDRoeFxuIiwgZGNtZC0+dGltZW91dCk7CisgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+ZGF0YV94ZmVyX2xlbjogMHglMDh4XG4iLCBkY21k LT5kYXRhX3hmZXJfbGVuKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21k LT5vcGNvZGU6ICAgICAgICAweCUwOHhcbiIsIGRjbWQtPm9wY29kZSk7CisgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+bWJveC53WzBdOiAgICAgMHglMDh4XG4iLCBkY21k LT5tYm94LndbMF0pOworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgImRjbWQtPm1i b3gud1sxXTogICAgIDB4JTA4eFxuIiwgZGNtZC0+bWJveC53WzFdKTsKKyAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5tYm94LndbMl06ICAgICAweCUwOHhcbiIsIGRjbWQt Pm1ib3gud1syXSk7CisgICAgZm9yIChpPTA7IGk8IE1JTihNQVhfSU9DVExfU0dFLCBkY21kLT5z Z2VfY291bnQpOyBpKyspIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi c2dsWyUwMmRdXG4iLCBpKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ICAgIHNnZTMyWyUwMmRdLnBoeXNfYWRkcjogMHglMDh4XG4iLCAgCisgICAgICAgICAgICBpLCBk Y21kLT5zZ2wuc2dlMzJbaV0ucGh5c19hZGRyKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiICAgIHNnZTMyWyUwMmRdLmxlbmd0aDogICAgMHglMDh4XG4iLCAKKyAgICAg ICAgICAgIGksIGRjbWQtPnNnbC5zZ2UzMltpXS5sZW5ndGgpOworICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICIgICAgc2dlNjRbJTAyZF0ucGh5c19hZGRyOiAweCUwOGxseFxu IiwKKyAgICAgICAgICAgIGksIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBkY21kLT5zZ2wuc2dl NjRbaV0ucGh5c19hZGRyKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ICAgIHNnZTY0WyUwMmRdLmxlbmd0aDogICAgMHglMDh4XG4iLCAKKyAgICAgICAgICAgIGksIGRj bWQtPnNnbC5zZ2U2NFtpXS5sZW5ndGgpOworICAgIH0KK30KKworLyoqCisgKiBtcnNhc19kdW1w X2lvY3RsOiAgICAgICBQcmludCBkZWJ1ZyBvdXRwdXQgZm9yIGlvY3RsIAorICogaW5wdXQ6ICAg ICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAg ICAgICAgICAgICAgICBpb2NwYWNrZXQgc3RydWN0dXJlIAorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb20gbXJzYXNfcGFzc3RocnUoKSB0byBwcmludCBvdXQgZGVidWcgaW5mb3Jt YXRpb24KKyAqIGluIHRoZSBoYW5kbGluZyBhbmQgcm91dGluZyBvZiBpb2N0bCBjb21tYW5kcy4K KyAqLwordm9pZCBtcnNhc19kdW1wX2lvY3RsKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVj dCBtcnNhc19pb2NwYWNrZXQgKnVzZXJfaW9jKQoreworICAgIHVuaW9uIG1yc2FzX2ZyYW1lICpp bl9jbWQgPSAodW5pb24gbXJzYXNfZnJhbWUgKikgJih1c2VyX2lvYy0+ZnJhbWUucmF3KTsKKyAg ICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSogZGNtZCA9IChzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFt ZSAqKSAmKGluX2NtZC0+ZGNtZCk7CisgICAgaW50IGk7CisgCisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAKKyAgICAgICAgIj09PT09PSBJbiAlcygpID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iLCBfX2Z1bmNfXyk7CisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiaG9zdF9ubzogICAgMHglMDRoeFxuIiwgdXNlcl9pb2MtPmhvc3Rfbm8p OworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIiBfX3BhZDE6ICAgIDB4JTA0aHhc biIsIHVzZXJfaW9jLT5fX3BhZDEpOworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rldiwg InNnbF9vZmY6ICAgIDB4JTA4eFxuIiwgIHVzZXJfaW9jLT5zZ2xfb2ZmKTsKKyAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJzZ2VfY291bnQ6ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+ c2dlX2NvdW50KTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJzZW5zZV9vZmY6 ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+c2Vuc2Vfb2ZmKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJzZW5zZV9sZW46ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+c2Vuc2VfbGVu KTsKKworICAgIG1yc2FzX2R1bXBfZGNtZChzYywgZGNtZCk7CisKKyAgICBmb3IgKGk9MDsgaTwg TUlOKE1BWF9JT0NUTF9TR0UsIHVzZXJfaW9jLT5zZ2VfY291bnQpOyBpKyspIHsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAic2dlWyUwMmRdXG4iLCBpKTsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAKKyAgICAgICAgICAgICIgICAgaW92X2Jhc2U6 ICVwXG4iLCB1c2VyX2lvYy0+c2dsW2ldLmlvdl9iYXNlKTsKKyAgICAgICAgZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCAiICAgIGlvdl9sZW46ICAlcFxuIiwgCisgICAgICAgICAgICAodm9p ZCopdXNlcl9pb2MtPnNnbFtpXS5pb3ZfbGVuKTsKKyAgICB9CisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAKKyAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cit9CisKKy8qKgorICogbXJz YXNfcGFzc3RocnU6ICAgICAgICBIYW5kbGUgcGFzcy10aHJvdWdoIGNvbW1hbmRzIAorICogaW5w dXQ6ICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgYXJndW1lbnQgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb20gbXJzYXNfaW9jdGwoKSB0byBoYW5kbGUgcGFzcy10aHJvdWdoIGFuZCAK KyAqIGlvY3RsIGNvbW1hbmRzIHRvIEZpcm13YXJlLiAgCisgKi8KK2ludCBtcnNhc19wYXNzdGhy dSggc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdm9pZCAqYXJnICkKK3sKKyAgICBzdHJ1Y3QgbXJz YXNfaW9jcGFja2V0ICp1c2VyX2lvYyA9IChzdHJ1Y3QgbXJzYXNfaW9jcGFja2V0ICopYXJnOwor ICAgIHVuaW9uICBtcnNhc19mcmFtZSAqaW5fY21kID0gKHVuaW9uIG1yc2FzX2ZyYW1lICopICYo dXNlcl9pb2MtPmZyYW1lLnJhdyk7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCA9IE5V TEw7CisgICAgYnVzX2RtYV90YWdfdCBpb2N0bF9kYXRhX3RhZ1tNQVhfSU9DVExfU0dFXTsKKyAg ICBidXNfZG1hbWFwX3QgaW9jdGxfZGF0YV9kbWFtYXBbTUFYX0lPQ1RMX1NHRV07CisgICAgdm9p ZCAqaW9jdGxfZGF0YV9tZW1bTUFYX0lPQ1RMX1NHRV07ICAvLyBpb2N0bCBkYXRhIHZpcnR1YWwg YWRkcgorICAgIGJ1c19hZGRyX3QgaW9jdGxfZGF0YV9waHlzX2FkZHJbTUFYX0lPQ1RMX1NHRV07 IC8vIGlvY3RsIGRhdGEgcGh5cyBhZGRyCisgICAgYnVzX2RtYV90YWdfdCBpb2N0bF9zZW5zZV90 YWcgPSAwOworICAgIGJ1c19kbWFtYXBfdCBpb2N0bF9zZW5zZV9kbWFtYXAgPSAwOworICAgIHZv aWQgKmlvY3RsX3NlbnNlX21lbSA9IDA7ICAKKyAgICBidXNfYWRkcl90IGlvY3RsX3NlbnNlX3Bo eXNfYWRkciA9IDA7IAorICAgIGludCBpLCBhZGFwdGVyLCBpb2N0bF9kYXRhX3NpemUsIGlvY3Rs X3NlbnNlX3NpemUsIHJldD0wOworICAgIHN0cnVjdCBtcnNhc19zZ2UzMiAqa2Vybl9zZ2UzMjsK KyAgICB1bnNpZ25lZCBsb25nICpzZW5zZV9wdHI7CisKKyAgICAvKiBGb3IgZGVidWcgLSB1bmNv bW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGZvciBkZWJ1ZyBvdXRwdXQgKi8KKyAgICAvL21yc2Fz X2R1bXBfaW9jdGwoc2MsIHVzZXJfaW9jKTsgCisKKyAgICAvKiAKKyAgICAgKiBDaGVjayBmb3Ig Tk9QIGZyb20gTWVnYUNsaS4uLiBNZWdhQ2xpIGNhbiBpc3N1ZSBhIERDTUQgb2YgMC4gIEluIHRo aXMgCisgICAgICogY2FzZSBkbyBub3RoaW5nIGFuZCByZXR1cm4gMCB0byBpdCBhcyBzdGF0dXMu CisgICAgICovCisgICAgaWYgKGluX2NtZC0+ZGNtZC5vcGNvZGUgPT0gMCkgeworICAgICAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJJbiAlcygpIEdvdCBhIE5PUFxuIiwgX19mdW5j X18pOworICAgICAgICB1c2VyX2lvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMgPSBNRklfU1RBVF9P SzsKKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICAvKiBWYWxpZGF0ZSBob3N0X25v ICovCisgICAgYWRhcHRlciA9IHVzZXJfaW9jLT5ob3N0X25vOworICAgIGlmIChhZGFwdGVyICE9 IGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSkgeworICAgICAgICBkZXZpY2VfcHJpbnRm KHNjLT5tcnNhc19kZXYsICJJbiAlcygpIElPQ1RMIG5vdCBmb3IgbWUhXG4iLCBfX2Z1bmNfXyk7 CisgICAgICAgIHJldHVybihFTk9FTlQpOworICAgIH0KKworICAgIC8qIFZhbGlkYXRlIFNHTCBs ZW5ndGggKi8KKyAgICBpZiAodXNlcl9pb2MtPnNnZV9jb3VudCA+IE1BWF9JT0NUTF9TR0UpIHsg CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkluICVzKCkgU0dMIGlzIHRv byBsb25nICglZCA+IDgpLlxuIiwgCisgICAgICAgICAgICBfX2Z1bmNfXywgdXNlcl9pb2MtPnNn ZV9jb3VudCk7CisgICAgICAgIHJldHVybihFTk9FTlQpOworICAgIH0KKworICAgIC8qIEdldCBh IGNvbW1hbmQgKi8KKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisgICAgaWYgKCFj bWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRmFpbGVkIHRvIGdl dCBhIGZyZWUgY21kIGZvciBJT0NUTFxuIik7CisgICAgICAgIHJldHVybihFTk9NRU0pOworICAg IH0KKworICAgIC8qCisgICAgICogVXNlcidzIElPQ1RMIHBhY2tldCBoYXMgMiBmcmFtZXMgKG1h eGltdW0pLiBDb3B5IHRob3NlIHR3bworICAgICAqIGZyYW1lcyBpbnRvIG91ciBjbWQncyBmcmFt ZXMuIGNtZC0+ZnJhbWUncyBjb250ZXh0IHdpbGwgZ2V0CisgICAgICogb3ZlcndyaXR0ZW4gd2hl biB3ZSBjb3B5IGZyb20gdXNlcidzIGZyYW1lcy4gU28gc2V0IHRoYXQgdmFsdWUKKyAgICAgKiBh bG9uZSBzZXBhcmF0ZWx5CisgICAgICovCisgICAgbWVtY3B5KGNtZC0+ZnJhbWUsIHVzZXJfaW9j LT5mcmFtZS5yYXcsIDIgKiBNRUdBTUZJX0ZSQU1FX1NJWkUpOworICAgIGNtZC0+ZnJhbWUtPmhk ci5jb250ZXh0ID0gY21kLT5pbmRleDsKKyAgICBjbWQtPmZyYW1lLT5oZHIucGFkXzAgPSAwOwor ICAgIGNtZC0+ZnJhbWUtPmhkci5mbGFncyAmPSB+KE1GSV9GUkFNRV9JRUVFIHwgTUZJX0ZSQU1F X1NHTDY0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRklfRlJBTUVfU0VOU0U2 NCk7CisKKyAgICAvKgorICAgICAqIFRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBiZXR3ZWVuIGFw cGxpY2F0aW9ucyBhbmQgdGhlIGZ3IHVzZXMKKyAgICAgKiBNRkkgZnJhbWVzLiBFLmcsIFJBSUQg Y29uZmlndXJhdGlvbiBjaGFuZ2VzLCBMRCBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICogZXRjIGFy ZSBhY2NvbXBsaXNoZXMgdGhyb3VnaCBkaWZmZXJlbnQga2luZHMgb2YgTUZJIGZyYW1lcy4gVGhl CisgICAgICogZHJpdmVyIG5lZWRzIHRvIGNhcmUgb25seSBhYm91dCBzdWJzdGl0dXRpbmcgdXNl ciBidWZmZXJzIHdpdGgKKyAgICAgKiBrZXJuZWwgYnVmZmVycyBpbiBTR0xzLiBUaGUgbG9jYXRp b24gb2YgU0dMIGlzIGVtYmVkZGVkIGluIHRoZQorICAgICAqIHN0cnVjdCBpb2NwYWNrZXQgaXRz ZWxmLgorICAgICAqLworICAgIGtlcm5fc2dlMzIgPSAoc3RydWN0IG1yc2FzX3NnZTMyICopCisg ICAgICAgICgodW5zaWduZWQgbG9uZyljbWQtPmZyYW1lICsgdXNlcl9pb2MtPnNnbF9vZmYpOwor CisgICAgLyoKKyAgICAgKiBGb3IgZWFjaCB1c2VyIGJ1ZmZlciwgY3JlYXRlIGEgbWlycm9yIGJ1 ZmZlciBhbmQgY29weSBpbgorICAgICAqLworICAgIGZvciAoaT0wOyBpIDwgdXNlcl9pb2MtPnNn ZV9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmICghdXNlcl9pb2MtPnNnbFtpXS5pb3ZfbGVuKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlvY3RsX2RhdGFfc2l6ZSA9IHVzZXJfaW9j LT5zZ2xbaV0uaW92X2xlbjsKKyAgICAgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1y c2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2Fk ZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIsICAg ICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCwgICAgICAgICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW9jdGxfZGF0YV9zaXplLCAgICAgICAgLy8gbWF4c2l6ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVu dHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jdGxfZGF0YV9zaXplLCAgICAg ICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1B X0FMTE9DTk9XLCAgICAgICAvLyBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmaW9jdGxfZGF0YV90YWdbaV0pKSB7CisgICAgICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgaW9jdGwgZGF0 YSB0YWdcbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgICAgICB9CisgICAg ICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKGlvY3RsX2RhdGFfdGFnW2ldLCAodm9pZCAqKikmaW9j dGxfZGF0YV9tZW1baV0sCisgICAgICAgICAgICAgICAgKEJVU19ETUFfTk9XQUlUIHwgQlVTX0RN QV9aRVJPKSwgJmlvY3RsX2RhdGFfZG1hbWFwW2ldKSkgeworICAgICAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGlvY3RsIGRhdGEgbWVtXG4iKTsK KyAgICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVz X2RtYW1hcF9sb2FkKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX2RtYW1hcFtpXSwKKyAg ICAgICAgICAgICAgICBpb2N0bF9kYXRhX21lbVtpXSwgaW9jdGxfZGF0YV9zaXplLCBtcnNhc19h bGxvY19jYiwKKyAgICAgICAgICAgICAgICAmaW9jdGxfZGF0YV9waHlzX2FkZHJbaV0sIEJVU19E TUFfTk9XQUlUKSkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGxvYWQgaW9jdGwgZGF0YSBtZW1cbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9N RU0pOworICAgICAgICB9CisKKyAgICAgICAgLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBh bmQgbGVuZ3RoICovCisgICAgICAgIGtlcm5fc2dlMzJbaV0ucGh5c19hZGRyID0gKHVfaW50MzJf dClpb2N0bF9kYXRhX3BoeXNfYWRkcltpXTsKKyAgICAgICAga2Vybl9zZ2UzMltpXS5sZW5ndGgg PSB1c2VyX2lvYy0+c2dsW2ldLmlvdl9sZW47CisKKyAgICAgICAgLyogQ29weSBpbiBkYXRhIGZy b20gdXNlciBzcGFjZSAqLworICAgICAgICByZXQgPSBjb3B5aW4odXNlcl9pb2MtPnNnbFtpXS5p b3ZfYmFzZSwgaW9jdGxfZGF0YV9tZW1baV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgdXNl cl9pb2MtPnNnbFtpXS5pb3ZfbGVuKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DVEwgY29weWluIGZhaWxlZCFcbiIpOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpb2N0bF9zZW5z ZV9zaXplID0gdXNlcl9pb2MtPnNlbnNlX2xlbjsKKyAgICBpZiAodXNlcl9pb2MtPnNlbnNlX2xl bikgeworICAgICAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3Rh ZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAg ICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRkcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRk cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAg ICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b2N0bF9zZW5zZV9zaXplLCAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb2N0bF9zZW5zZV9zaXplLCAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAg ICAgIC8vIGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws ICAgICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZpb2N0bF9zZW5zZV90YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRm KHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgaW9jdGwgc2Vuc2UgdGFnXG4iKTsKKyAg ICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVzX2Rt YW1lbV9hbGxvYyhpb2N0bF9zZW5zZV90YWcsICh2b2lkICoqKSZpb2N0bF9zZW5zZV9tZW0sCisg ICAgICAgICAgICAgICAgKEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPKSwgJmlvY3RsX3Nl bnNlX2RtYW1hcCkpIHsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rldiwg IkNhbm5vdCBhbGxvY2F0ZSBpb2N0bCBkYXRhIG1lbVxuIik7CisgICAgICAgICAgICByZXR1cm4g KEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChpb2N0bF9z ZW5zZV90YWcsIGlvY3RsX3NlbnNlX2RtYW1hcCwKKyAgICAgICAgICAgICAgICBpb2N0bF9zZW5z ZV9tZW0sIGlvY3RsX3NlbnNlX3NpemUsIG1yc2FzX2FsbG9jX2NiLAorICAgICAgICAgICAgICAg ICZpb2N0bF9zZW5zZV9waHlzX2FkZHIsIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGxvYWQgaW9jdGwgc2Vuc2UgbWVt XG4iKTsKKyAgICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBz ZW5zZV9wdHIgPSAKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25n KWNtZC0+ZnJhbWUgKyB1c2VyX2lvYy0+c2Vuc2Vfb2ZmKTsKKyAgICAgICAgICAgIHNlbnNlX3B0 ciA9IGlvY3RsX3NlbnNlX21lbTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgc3lu Y19jbWQgZmxhZyBzbyB0aGF0IHRoZSBJU1Iga25vd3Mgbm90IHRvIGNvbXBsZXRlIHRoaXMKKyAg ICAgKiBjbWQgdG8gdGhlIFNDU0kgbWlkLWxheWVyCisgICAgICovCisgICAgY21kLT5zeW5jX2Nt ZCA9IDE7CisgICAgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc2MsIGNtZCk7CisgICAgY21kLT5z eW5jX2NtZCA9IDA7CisKKyAgICAvKgorICAgICAqIGNvcHkgb3V0IHRoZSBrZXJuZWwgYnVmZmVy cyB0byB1c2VyIGJ1ZmZlcnMKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNlcl9pb2Mt PnNnZV9jb3VudDsgaSsrKSB7CisgICAgICAgIHJldCA9IGNvcHlvdXQoaW9jdGxfZGF0YV9tZW1b aV0sIHVzZXJfaW9jLT5zZ2xbaV0uaW92X2Jhc2UsIAorICAgICAgICAgICAgdXNlcl9pb2MtPnNn bFtpXS5pb3ZfbGVuKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DVEwgY29weW91dCBmYWlsZWQhXG4iKTsKKyAgICAgICAg ICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IG91 dCB0aGUgc2Vuc2UKKyAgICAgKi8KKyAgICBpZiAodXNlcl9pb2MtPnNlbnNlX2xlbikgeworICAg ICAgICAvKgorICAgICAgICAgKiBzZW5zZV9idWZmIHBvaW50cyB0byB0aGUgbG9jYXRpb24gdGhh dCBoYXMgdGhlIHVzZXIKKyAgICAgICAgICogc2Vuc2UgYnVmZmVyIGFkZHJlc3MKKyAgICAgICAg ICovCisgICAgICAgIHNlbnNlX3B0ciA9ICh1bnNpZ25lZCBsb25nICopICgodW5zaWduZWQgbG9u Zyl1c2VyX2lvYy0+ZnJhbWUucmF3ICsKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lvYy0+ c2Vuc2Vfb2ZmKTsKKyAgICAgICAgcmV0ID0gY29weW91dChpb2N0bF9zZW5zZV9tZW0sICh1bnNp Z25lZCBsb25nKikqc2Vuc2VfcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lvYy0+ c2Vuc2VfbGVuKTsgCisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIklPQ1RMIHNlbnNlIGNvcHlvdXQgZmFpbGVkIVxuIik7CisgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUmV0 dXJuIGNvbW1hbmQgc3RhdHVzIHRvIHVzZXIgc3BhY2UKKyAgICAgKi8KKyAgICBtZW1jcHkoJnVz ZXJfaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywgJmNtZC0+ZnJhbWUtPmhkci5jbWRfc3RhdHVz LCAKKyAgICAgICAgICAgIHNpemVvZih1X2ludDhfdCkpOworCitvdXQ6CisgICAgLyogCisgICAg ICogUmVsZWFzZSBzZW5zZSBidWZmZXIgCisgICAgICovCisgICAgaWYgKGlvY3RsX3NlbnNlX3Bo eXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoaW9jdGxfc2Vuc2VfdGFnLCBpb2N0 bF9zZW5zZV9kbWFtYXApOworICAgIGlmIChpb2N0bF9zZW5zZV9tZW0pCisgICAgICAgIGJ1c19k bWFtZW1fZnJlZShpb2N0bF9zZW5zZV90YWcsIGlvY3RsX3NlbnNlX21lbSwgaW9jdGxfc2Vuc2Vf ZG1hbWFwKTsKKyAgICBpZiAoaW9jdGxfc2Vuc2VfdGFnKQorICAgICAgICBidXNfZG1hX3RhZ19k ZXN0cm95KGlvY3RsX3NlbnNlX3RhZyk7CisKKyAgICAvKiAKKyAgICAgKiBSZWxlYXNlIGRhdGEg YnVmZmVycyAKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNlcl9pb2MtPnNnZV9jb3Vu dDsgaSsrKSB7CisgICAgICAgIGlmIChpb2N0bF9kYXRhX3BoeXNfYWRkcltpXSkKKyAgICAgICAg ICAgIGJ1c19kbWFtYXBfdW5sb2FkKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX2RtYW1h cFtpXSk7CisgICAgICAgIGlmIChpb2N0bF9kYXRhX21lbVtpXSAhPSBOVUxMKQorICAgICAgICAg ICAgYnVzX2RtYW1lbV9mcmVlKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX21lbVtpXSwg CisgICAgICAgICAgICAgICAgaW9jdGxfZGF0YV9kbWFtYXBbaV0pOworICAgICAgICBpZiAoaW9j dGxfZGF0YV90YWdbaV0gIT0gTlVMTCkKKyAgICAgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3ko aW9jdGxfZGF0YV90YWdbaV0pOworICAgIH0KKworICAgIC8qIEZyZWUgY29tbWFuZCAqLworICAg IG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCisgICAgcmV0dXJuKHJldCk7Cit9CisKKy8q KgorICogbXJzYXNfYWxsb2NfbWZpX2NtZHM6ICBBbGxvY2F0ZXMgdGhlIGNvbW1hbmQgcGFja2V0 cworICogaW5wdXQ6ICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUK KyAqCisgKiBFYWNoIElPQ1RMIG9yIHBhc3N0aHJ1IGNvbW1hbmQgdGhhdCBpcyBpc3N1ZWQgdG8g dGhlIEZXIGFyZSB3cmFwcGVkIGluIGEKKyAqIGxvY2FsIGRhdGEgc3RydWN0dXJlIGNhbGxlZCBt cnNhc19tZmlfY21kLiAgVGhlIGZyYW1lIGVtYmVkZGVkIGluIHRoaXMgCisgKiBtcnNhc19tZmkg aXMgaXNzdWVkIHRvIEZXLiBUaGUgYXJyYXkgaXMgdXNlZCBvbmx5IHRvIGxvb2sgdXAgdGhlIAor ICogbXJzYXNfbWZpX2NtZCBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGZyZWUgY29tbWFuZHMgYXJl IG1haW50YWluZWQgaW4gYQorICogbGlua2VkIGxpc3QuCisgKi8KK2ludCBtcnNhc19hbGxvY19t ZmlfY21kcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpLCBqOworICAgIHVf aW50MzJfdCBtYXhfY21kOworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisKKyAgICBt YXhfY21kID0gTVJTQVNfTUFYX01GSV9DTURTOworCisgICAgLyoKKyAgICAgKiBzYy0+bWZpX2Nt ZF9saXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtcnNhc19tZmlfY21kIHBvaW50ZXJzLiBBbGxv Y2F0ZSB0aGUKKyAgICAgKiBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGlu ZGl2aWR1YWwgY29tbWFuZHMuCisgICAgICovCisgICAgc2MtPm1maV9jbWRfbGlzdCA9IG1hbGxv YyhzaXplb2Yoc3RydWN0IG1yc2FzX21maV9jbWQqKSptYXhfY21kLCBNX01SU0FTLCBNX05PV0FJ VCk7CisgICAgaWYgKCFzYy0+bWZpX2NtZF9saXN0KSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIG1maV9jbWQgY21kX2xpc3Qu XG4iKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAgIG1lbXNldChzYy0+bWZp X2NtZF9saXN0LCAwLCBzaXplb2Yoc3RydWN0IG1yc2FzX21maV9jbWQgKikqbWF4X2NtZCk7Cisg ICAgZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgeworICAgICAgICBzYy0+bWZpX2NtZF9s aXN0W2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXJzYXNfbWZpX2NtZCksIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTV9NUlNBUywgTV9OT1dBSVQpOworICAgICAgICBpZiAo IXNjLT5tZmlfY21kX2xpc3RbaV0pIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBq KyspCisgICAgICAgICAgICAgICAgZnJlZShzYy0+bWZpX2NtZF9saXN0W2pdLE1fTVJTQVMpOwor ICAgICAgICAgICAgZnJlZShzYy0+bWZpX2NtZF9saXN0LCBNX01SU0FTKTsKKyAgICAgICAgICAg IHNjLT5tZmlfY21kX2xpc3QgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuKEVOT01FTSk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7Cisg ICAgICAgIGNtZCA9IHNjLT5tZmlfY21kX2xpc3RbaV07CisgICAgICAgIG1lbXNldChjbWQsIDAs IHNpemVvZihzdHJ1Y3QgbXJzYXNfbWZpX2NtZCkpOworICAgICAgICBjbWQtPmluZGV4ID0gaTsK KyAgICAgICAgY21kLT5jY2JfcHRyID0gTlVMTDsKKyAgICAgICAgY21kLT5zYyA9IHNjOyAKKyAg ICAgICAgVEFJTFFfSU5TRVJUX1RBSUwoJihzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpLCBj bWQsIG5leHQpOworICAgIH0KKworICAgIC8qIGNyZWF0ZSBhIGZyYW1lIHBvb2wgYW5kIGFzc2ln biBvbmUgZnJhbWUgdG8gZWFjaCBjb21tYW5kICovCisgICAgaWYgKG1yc2FzX2NyZWF0ZV9mcmFt ZV9wb29sKHNjKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgYWxsb2NhdGUgRE1BIGZyYW1lIHBvb2wuXG4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IE1SU0FTX01BWF9NRklfQ01EUzsgaSsrKSB7IC8vIEZyZWUgdGhlIGZyYW1lcworICAgICAgICAg ICAgY21kID0gc2MtPm1maV9jbWRfbGlzdFtpXTsKKyAgICAgICAgICAgIG1yc2FzX2ZyZWVfZnJh bWUoc2MsIGNtZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjLT5tZmljbWRfZnJhbWVfdGFn ICE9IE5VTEwpCisgICAgICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5tZmljbWRfZnJh bWVfdGFnKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorCisgICAgcmV0dXJuKDAp OworfQorCisvKioKKyAqIG1yc2FzX2NyZWF0ZV9mcmFtZV9wb29sIC0gICBDcmVhdGVzIERNQSBw b29sIGZvciBjbWQgZnJhbWVzCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogRWFjaCBjb21tYW5kIHBhY2tldCBoYXMgYW4gZW1iZWRkZWQg RE1BIG1lbW9yeSBidWZmZXIgdGhhdCBpcyB1c2VkIGZvcgorICogZmlsbGluZyBNRkkgZnJhbWUg YW5kIHRoZSBTRyBsaXN0IHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgZnJhbWUuIFRoaXMK KyAqIGZ1bmN0aW9uIGNyZWF0ZXMgdGhvc2UgRE1BIG1lbW9yeSBidWZmZXJzIGZvciBlYWNoIGNv bW1hbmQgcGFja2V0IGJ5IHVzaW5nCisgKiBQQ0kgcG9vbCBmYWNpbGl0eS4gcGFkXzAgaXMgaW5p dGlhbGl6ZWQgdG8gMCB0byBwcmV2ZW50IGNvcnJ1cHRpbmcgdmFsdWUgCisgKiBvZiBjb250ZXh0 IGFuZCBjb3VsZCBjYXVzZSBGVyBjcmFzaC4KKyAqLworc3RhdGljIGludCBtcnNhc19jcmVhdGVf ZnJhbWVfcG9vbChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpOworICAgIHN0 cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBz Yy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCAwLCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBo aWdoYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAg ICAgIC8vIGZpbHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJT QVNfTUZJX0ZSQU1FX1NJWkUsICAgLy8gbWF4c2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1SU0FTX01GSV9GUkFNRV9TSVpFLCAgIC8vIG1heHNlZ3NpemUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1BX0FMTE9DTk9XLCAgICAgICAvLyBmbGFncwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGxv Y2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5tZmljbWRf ZnJhbWVfdGFnKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgY3JlYXRlIE1GSSBmcmFtZSB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7Cisg ICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE1SU0FTX01BWF9NRklfQ01EUzsgaSsrKSB7Cisg ICAgICAgIGNtZCA9IHNjLT5tZmlfY21kX2xpc3RbaV07CisgICAgICAgIGNtZC0+ZnJhbWUgPSBt cnNhc19hbGxvY19mcmFtZShzYywgY21kKTsKKyAgICAgICAgaWYgKGNtZC0+ZnJhbWUgPT0gTlVM TCkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFs bG9jIE1GSSBmcmFtZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9NRU0pOwor ICAgICAgICB9IAorICAgICAgICBtZW1zZXQoY21kLT5mcmFtZSwgMCwgTVJTQVNfTUZJX0ZSQU1F X1NJWkUpOyAKKyAgICAgICAgY21kLT5mcmFtZS0+aW8uY29udGV4dCA9IGNtZC0+aW5kZXg7Cisg ICAgICAgIGNtZC0+ZnJhbWUtPmlvLnBhZF8wID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4oMCk7 Cit9CisKKy8qKgorICogbXJzYXNfYWxsb2NfZnJhbWUgLSAgIEFsbG9jYXRlcyBNRkkgRnJhbWVz CisgKiBpbnB1dDogICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogQ3Jl YXRlIGJ1cyBETUEgbWVtb3J5IHRhZyBhbmQgZG1hbWFwIGFuZCBsb2FkIG1lbW9yeSBmb3IgTUZJ IGZyYW1lcy4gCisgKiBSZXR1cm5zIHZpcnR1YWwgbWVtb3J5IHBvaW50ZXIgdG8gYWxsb2NhdGVk IHJlZ2lvbi4gCisgKi8KK3ZvaWQgKm1yc2FzX2FsbG9jX2ZyYW1lKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgdV9pbnQzMl90IGZyYW1l X3NpemUgPSBNUlNBU19NRklfRlJBTUVfU0laRTsKKworICAgIGlmIChidXNfZG1hbWVtX2FsbG9j KHNjLT5tZmljbWRfZnJhbWVfdGFnLCAodm9pZCAqKikmY21kLT5mcmFtZV9tZW0sCisgICAgICAg ICAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmY21kLT5mcmFtZV9kbWFtYXApKSB7CisgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBNRkkgZnJhbWUg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICB9CisgICAgaWYgKGJ1c19k bWFtYXBfbG9hZChzYy0+bWZpY21kX2ZyYW1lX3RhZywgY21kLT5mcmFtZV9kbWFtYXAsCisgICAg ICAgICAgICAgICAgICAgICAgICBjbWQtPmZyYW1lX21lbSwgZnJhbWVfc2l6ZSwgbXJzYXNfYWxs b2NfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5mcmFtZV9waHlzX2FkZHIsIEJV U19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJD YW5ub3QgbG9hZCBJTyByZXF1ZXN0IG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoTlVMTCk7 CisgICAgfQorICAKKyAgICByZXR1cm4oY21kLT5mcmFtZV9tZW0pOworfQorCisvKgorICogbXJz YXNfYWxsb2NfY2I6ICBDYWxsYmFjayBmdW5jdGlvbiBvZiBidXNfZG1hbWFwX2xvYWQoKQorICog aW5wdXQ6ICAgICAgICAgICBjYWxsYmFjayBhcmd1bWVudCwKKyAqICAgICAgICAgICAgICAgICAg bWFjaGluZSBkZXBlbmRlbnQgdHlwZSB0aGF0IGRlc2NyaWJlcyBETUEgc2VnbWVudHMsCisgKiAg ICAgICAgICAgICAgICAgIG51bWJlciBvZiBzZWdtZW50cywKKyAqICAgICAgICAgICAgICAgICAg ZXJyb3IgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0aGUgZHJpdmVyIHRvIHJl Y2VpdmUgbWFwcGluZyBpbmZvcm1hdGlvbiByZXN1bHRhbnQKKyAqIG9mIHRoZSBidXNfZG1hbWFw X2xvYWQoKS4gVGhlIGluZm9ybWF0aW9uIGlzIGFjdHVhbGx5IG5vdCBiZWluZyB1c2VkLCAKKyAq IGJ1dCB0aGUgYWRkcmVzcyBpcyBzYXZlZCBhbnl3YXkuIAorICovCitzdGF0aWMgdm9pZCBtcnNh c19hbGxvY19jYih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLAorICAgICAgICBp bnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKyAgICBidXNfYWRkcl90ICphZGRyOworCisgICAgYWRk ciA9IGFyZzsKKyAgICAqYWRkciA9IHNlZ3NbMF0uZHNfYWRkcjsKK30KKworLyoqCisgKiBtcnNh c19mcmVlX2ZyYW1lczogICAgRnJlZXMgbWVtb3J5IGZvciAgTUZJIGZyYW1lcworICogaW5wdXQ6 ICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIERlYWxsb2NhdGVzIE1G SSBmcmFtZXMgbWVtb3J5LiAgQ2FsbGVkIGZyb20gbXJzYXNfZnJlZV9tZW0oKSBkdXJpbmcgCisg KiBkZXRhY2ggYW5kIGVycm9yIGNhc2UgZHVyaW5nIGNyZWF0aW9uIG9mIGZyYW1lIHBvb2wuCisg Ki8KK3ZvaWQgbXJzYXNfZnJlZV9mcmFtZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3Qg bXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIGlmIChjbWQtPmZyYW1lX3BoeXNfYWRkcikKKyAg ICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPm1maWNtZF9mcmFtZV90YWcsIGNtZC0+ZnJhbWVf ZG1hbWFwKTsKKyAgICBpZiAoY21kLT5mcmFtZV9tZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YW1lbV9mcmVlKHNjLT5tZmljbWRfZnJhbWVfdGFnLCBjbWQtPmZyYW1lX21lbSwgY21kLT5mcmFt ZV9kbWFtYXApOworfQpJbmRleDogc3lzL2Rldi9tcnNhcy9tcnNhc19pb2N0bC5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvbXJzYXMvbXJzYXNfaW9jdGwuaAkocmV2aXNpb24gMCkKKysrIHN5cy9k ZXYvbXJzYXMvbXJzYXNfaW9jdGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2lmbmRlZiBNUlNBU19JT0NUTF9ICisjZGVmaW5lIE1SU0FTX0lPQ1RMX0gKKworI2lmbmRlZiBf SU9XUgorI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KKyNlbmRpZiAgLyogIV9JT1dSICovCisKKy8q CisgKiBXZSBuZWVkIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlIG1maSBkcml2ZXIgdW50 aWwgTWVnYUNsaSBhZGRzIAorICogc3VwcG9ydCBmb3IgdGhpcyAobXJzYXMpIGRyaXZlcjoKKyAq ICAgIE0gaXMgZm9yIE1lZ2FSQUlELiAoVGhpcyBpcyB0eXBpY2FsbHkgdGhlIHZlbmRvciBvciBw cm9kdWN0IGluaXRpYWwpCisgKiAgICAxIGFyYml0cmFyeS4gKFRoaXMgbWF5IGJlIHVzZWQgdG8g c2VnbWVudCBraW5kcyBvZiBjb21tYW5kcy4gIAorICogICAgKDEtOSBzdGF0dXMsIDEwLTIwIHBv bGljeSwgZXRjLikKKyAqICAgIHN0cnVjdCBtcnNhc19pb2NwYWNrZXQgKHNpemVvZigpIHRoaXMg cGFyYW1ldGVyIHdpbGwgYmUgdXNlZC4pCisgKiBUaGVzZSB0aHJlZSB2YWx1ZXMgYXJlIGVuY29k ZWQgaW50byBhIHNvbWV3aGF0IHVuaXF1ZSwgMzItYml0IHZhbHVlLgorICovCisKKyNkZWZpbmUg TVJTQVNfSU9DX0ZJUk1XQVJFX1BBU1NfVEhST1VHSCAgIF9JT1dSKCdNJywgMSwgc3RydWN0IG1y c2FzX2lvY3BhY2tldCkKKworI2RlZmluZSBNUlNBU19JT0NfU0NBTl9CVVMgICAgICAgICAgICAg ICAgX0lPKCdNJywgIDEwKQorCisjZGVmaW5lIE1BWF9JT0NUTF9TR0UgICAgICAgICAgICAgICAg ICAgMTYKKyNkZWZpbmUgTUZJX0ZSQU1FX0RJUl9SRUFEICAgICAgICAgICAgICAweDAwMTAKKyNk ZWZpbmUgTUZJX0NNRF9MRF9TQ1NJX0lPICAgICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgSU5R VUlSWV9DTUQgICAgIDB4MTIKKyNkZWZpbmUgSU5RVUlSWV9DTURMRU4gIDYKKyNkZWZpbmUgSU5R VUlSWV9SRVBMWV9MRU4gOTYKKyNkZWZpbmUgSU5RVUlSWV9WRU5ET1IgIDggICAgICAgLyogT2Zm c2V0IGluIHJlcGx5IGRhdGEgdG8gdmVuZG9yIG5hbWUgKi8KKyNkZWZpbmUgU0NTSV9TRU5TRV9C VUZGRVJTSVpFICA5NgorCisjZGVmaW5lIE1FR0FNRklfUkFXX0ZSQU1FX1NJWkUgMTI4CisKKwor I3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfaW9jcGFja2V0IHsKKyAgICB1X2ludDE2X3Qg aG9zdF9ubzsKKyAgICB1X2ludDE2X3QgX19wYWQxOworICAgIHVfaW50MzJfdCBzZ2xfb2ZmOwor ICAgIHVfaW50MzJfdCBzZ2VfY291bnQ7CisgICAgdV9pbnQzMl90IHNlbnNlX29mZjsKKyAgICB1 X2ludDMyX3Qgc2Vuc2VfbGVuOworICAgIHVuaW9uIHsKKyAgICAgICAgdV9pbnQ4X3QgcmF3W01F R0FNRklfUkFXX0ZSQU1FX1NJWkVdOworICAgICAgICBzdHJ1Y3QgbXJzYXNfaGVhZGVyIGhkcjsK KyAgICB9IGZyYW1lOworICAgIHN0cnVjdCBpb3ZlYyBzZ2xbTUFYX0lPQ1RMX1NHRV07Cit9Owor I3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIE1SU0FTX0lPQ1RMX0ggKi8KSW5kZXg6IHN5cy9k ZXYvbXJzYXMvbXJzYXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L21yc2FzL21yc2FzLmMJKHJl dmlzaW9uIDApCisrKyBzeXMvZGV2L21yc2FzL21yc2FzLmMJKHdvcmtpbmcgY29weSkKQEAgLTAs MCArMSwzNjU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBNb2RpZmllZCBi eSBEZXNhaSBLYXNoeWFwIChrYXNoeWFwLmRlc2FpQGxzaS5jb20pCisgKiBNb2RpZmllZCBieSBT YXhlbmEgU3VtaXQgKHN1bWl0LnNheGVuYUBsc2kuY29tKQorICogU3VwcG9ydDogZnJlZWJzZHJh aWRAbHNpLmNvbQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m IHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg KiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisg KiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29u dGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9m IHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGlu ZworICogb2ZmaWNpYWwgcG9saWNpZXMsZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0 aGUgRnJlZUJTRCBQcm9qZWN0LgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG86IDxtZWdhcmFpZGZi c2RAbHNpLmNvbT4KKyAqIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFu ZSwgTWlscGl0YXMsIENBIDk1MDM1CisgKiAgICBBVFROOiBNZWdhUmFpZCBGcmVlQlNECisgKgor ICovCisKKworI2luY2x1ZGUgPGRldi9tcnNhcy9tcnNhcy5oPgorI2luY2x1ZGUgPGRldi9tcnNh cy9tcnNhc19pb2N0bC5oPgorCisjaW5jbHVkZSA8Y2FtL2NhbS5oPgorI2luY2x1ZGUgPGNhbS9j YW1fY2NiLmg+CisKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+ CisKKworLyogCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIAorICovCitzdGF0aWMgZF9vcGVuX3Qg ICAgIG1yc2FzX29wZW47CitzdGF0aWMgZF9jbG9zZV90ICAgIG1yc2FzX2Nsb3NlOworc3RhdGlj IGRfcmVhZF90ICAgICBtcnNhc19yZWFkOworc3RhdGljIGRfd3JpdGVfdCAgICBtcnNhc193cml0 ZTsKK3N0YXRpYyBkX2lvY3RsX3QgICAgbXJzYXNfaW9jdGw7CisKK3N0YXRpYyBzdHJ1Y3QgbXJz YXNfaWRlbnQgKm1yc2FzX2ZpbmRfaWRlbnQoZGV2aWNlX3QpOworc3RhdGljIHZvaWQgbXJzYXNf c2h1dGRvd25fY3RscihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3Qgb3Bjb2RlKTsK K3N0YXRpYyB2b2lkIG1yc2FzX2ZsdXNoX2NhY2hlKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwor c3RhdGljIHZvaWQgbXJzYXNfcmVzZXRfcmVwbHlfZGVzYyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj KTsKK3N0YXRpYyB2b2lkIG1yc2FzX29jcl90aHJlYWQodm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQg bXJzYXNfZ2V0X21hcF9pbmZvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBt cnNhc19nZXRfbGRfbWFwX2luZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50 IG1yc2FzX3N5bmNfbWFwX2luZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50 IG1yc2FzX2dldF9wZF9saXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBt cnNhc19nZXRfbGRfbGlzdChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJz YXNfc2V0dXBfaXJxKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBtcnNhc19h bGxvY19tZW0oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX2luaXRf Zncoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX3NldHVwX3JhaWRt YXAoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX2NvbXBsZXRlX2Nt ZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJzYXNfY2xlYXJfaW50cihz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJzYXNfZ2V0X2N0cmxfaW5mbyhz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG1yc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvKTsKK3N0YXRpYyBpbnQgbXJzYXNfaXNzdWVfYmxv Y2tlZF9hYm9ydF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kX3RvX2Fib3J0KTsKK3VfaW50MzJfdCBt cnNhc19yZWFkX3JlZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0KTsKK3VfaW50 OF90IG1yc2FzX2J1aWxkX21wdG1maV9wYXNzdGhydShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqbWZpX2NtZCk7 CitpbnQgbXJzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBp bnQgb2NyKTsKK2ludCBtcnNhc19pbml0X2FkYXB0ZXIoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7 CitpbnQgbXJzYXNfYWxsb2NfbXB0X2NtZHMoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQg bXJzYXNfYWxsb2NfaW9jX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2ludCBtcnNhc19h bGxvY19jdGxyX2luZm9fY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2lv Y19pbml0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2J1c19zY2FuKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2lzc3VlX2RjbWQoc3RydWN0IG1yc2FzX3Nv ZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7CitpbnQgbXJzYXNfaXNzdWVfcG9s bGVkKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpOwor aW50IG1yc2FzX3Jlc2V0X2N0cmwoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNf d2FpdF9mb3Jfb3V0c3RhbmRpbmcoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNf aXNzdWVfYmxvY2tlZF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7CitpbnQgbXJzYXNfYWxsb2Nf dG1wX2RjbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX3RtcF9kY21kICp0 Y21kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpOwordm9pZCBtcnNhc19y ZWxlYXNlX21maV9jbWQoc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7IAordm9pZCBtcnNhc193 YWtldXAoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7 Cit2b2lkIG1yc2FzX2NvbXBsZXRlX2FlbihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3Qg bXJzYXNfbWZpX2NtZCAqY21kKTsKK3ZvaWQgbXJzYXNfY29tcGxldGVfYWJvcnQoc3RydWN0IG1y c2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7Cit2b2lkIG1yc2FzX2Rp c2FibGVfaW50cihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfZW5hYmxlX2lu dHIoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfaW9jX2NtZChzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfZnJlZV9tZW0oc3RydWN0IG1yc2FzX3Nv ZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfdG1wX2RjbWQoc3RydWN0IG1yc2FzX3RtcF9kY21k ICp0bXApOwordm9pZCBtcnNhc19pc3Iodm9pZCAqYXJnKTsKK3ZvaWQgbXJzYXNfdGVhcmRvd25f aW50cihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfYWRkcl9jYih2b2lkICph cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcik7IAordm9p ZCBtcnNhc19raWxsX2hiYSAoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2Fl bl9oYW5kbGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc193cml0ZV9yZWco c3RydWN0IG1yc2FzX3NvZnRjICpzYywgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHZhbHVlKTsKK3ZvaWQgbXJzYXNfZmlyZV9jbWQoc3RydWN0IG1yc2Fz X3NvZnRjICpzYywgdV9pbnQzMl90IHJlcV9kZXNjX2xvLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHJlcV9kZXNjX2hpKTsKK3ZvaWQgbXJzYXNfZnJlZV9jdGxyX2luZm9f Y21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc19jb21wbGV0ZV9tcHRtZmlf cGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQsIHVfaW50OF90IHN0YXR1cyk7Cit2b2lkIG1y c2FzX21hcF9tcHRfY21kX3N0YXR1cyhzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kLCB1X2ludDhf dCBzdGF0dXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDhfdCBleHRTdGF0dXMp Oworc3RydWN0IG1yc2FzX21maV9jbWQqIG1yc2FzX2dldF9tZmlfY21kKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOworTVJTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICogbXJzYXNfYnVpbGRf bXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKTsKKworZXh0ZXJuIGludCBtcnNhc19jYW1fYXR0 YWNoKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfY2FtX2RldGFj aChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIG1yc2FzX2NtZF9kb25lKHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQpOworZXh0ZXJu IHZvaWQgbXJzYXNfZnJlZV9mcmFtZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJz YXNfbWZpX2NtZCAqY21kKTsKK2V4dGVybiBpbnQgbXJzYXNfYWxsb2NfbWZpX2NtZHMoc3RydWN0 IG1yc2FzX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBtcnNhc19yZWxlYXNlX21wdF9jbWQoc3Ry dWN0IG1yc2FzX21wdF9jbWQgKmNtZCk7IAorZXh0ZXJuIHN0cnVjdCBtcnNhc19tcHRfY21kICpt cnNhc19nZXRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVybiBpbnQgbXJz YXNfcGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdm9pZCAqYXJnKTsKK2V4dGVybiB1 aW50OF90IE1SX1ZhbGlkYXRlTWFwSW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVy biB1X2ludDE2X3QgTVJfR2V0TERUZ3RJZCh1X2ludDMyX3QgbGQsIE1SX0ZXX1JBSURfTUFQX0FM TCAqbWFwKTsKK2V4dGVybiBNUl9MRF9SQUlEICpNUl9MZFJhaWRHZXQodV9pbnQzMl90IGxkLCBN Ul9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitleHRlcm4gdm9pZCBtcnNhc194cHRfZnJlZXplKHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfeHB0X3JlbGVhc2Uoc3Ry dWN0IG1yc2FzX3NvZnRjICpzYyk7CitleHRlcm4gTVJTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VO SU9OICptcnNhc19nZXRfcmVxdWVzdF9kZXNjKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IGluZGV4KTsKK2V4dGVybiBpbnQgbXJzYXNf YnVzX3NjYW5fc2ltKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpzaW0p Oworc3RhdGljIGludCBtcnNhc19hbGxvY19ldnRfbG9nX2luZm9fY21kKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOworc3RhdGljIHZvaWQgbXJzYXNfZnJlZV9ldnRfbG9nX2luZm9fY21kKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOworU1lTQ1RMX05PREUoX2h3LCBPSURfQVVUTywgbXJzYXMsIENU TEZMQUdfUkQsIDAsICJNUlNBUyBEcml2ZXIgUGFyYW1ldGVycyIpOworCisKKy8qKgorICogUENJ IGRldmljZSBzdHJ1Y3QgYW5kIHRhYmxlCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBtcnNhc19p ZGVudCB7CisgICAgdWludDE2X3QgICAgdmVuZG9yOworICAgIHVpbnQxNl90ICAgIGRldmljZTsK KyAgICB1aW50MTZfdCAgICBzdWJ2ZW5kb3I7CisgICAgdWludDE2X3QgICAgc3ViZGV2aWNlOwor ICAgIGNvbnN0IGNoYXIgICpkZXNjOworfSBNUlNBU19DVExSX0lEOworCitNUlNBU19DVExSX0lE IGRldmljZV90YWJsZVtdID0geworICAgIHsweDEwMDAsIE1SU0FTX1RCT0xULCAweGZmZmYsIDB4 ZmZmZiwgIkxTSSBUaHVuZGVyYm9sdCBTQVMgQ29udHJvbGxlciJ9LAorICAgIHswLCAwLCAwLCAw LCBOVUxMfQorfTsKKworLyoqCisgKiBDaGFyYWN0ZXIgZGV2aWNlIGVudHJ5IHBvaW50cyAKKyAq CisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2RldnN3IG1yc2FzX2NkZXZzdyA9IHsKKyAgICAuZF92ZXJz aW9uID0gICAgRF9WRVJTSU9OLAorICAgIC5kX29wZW4gPSAgIG1yc2FzX29wZW4sCisgICAgLmRf Y2xvc2UgPSAgbXJzYXNfY2xvc2UsCisgICAgLmRfcmVhZCA9ICAgbXJzYXNfcmVhZCwKKyAgICAu ZF93cml0ZSA9ICBtcnNhc193cml0ZSwKKyAgICAuZF9pb2N0bCA9ICBtcnNhc19pb2N0bCwKKyAg ICAuZF9uYW1lID0gICAibXJzYXMiLAorfTsKKworTUFMTE9DX0RFRklORShNX01SU0FTLCAibXJz YXNidWYiLCAiQnVmZmVycyBmb3IgdGhlIE1SU0FTIGRyaXZlciIpOworCisvKioKKyAqIEluIHRo ZSBjZGV2c3cgcm91dGluZXMsIHdlIGZpbmQgb3VyIHNvZnRjIGJ5IHVzaW5nIHRoZSBzaV9kcnYx IG1lbWJlcgorICogb2Ygc3RydWN0IGNkZXYuICBXZSBzZXQgdGhpcyB2YXJpYWJsZSB0byBwb2lu dCB0byBvdXIgc29mdGMgaW4gb3VyCisgKiBhdHRhY2ggcm91dGluZSB3aGVuIHdlIGNyZWF0ZSB0 aGUgL2RldiBlbnRyeS4KKyAqLworaW50CittcnNhc19vcGVuKHN0cnVjdCBjZGV2ICpkZXYsIGlu dCBvZmxhZ3MsIGludCBkZXZ0eXBlLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJz YXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXYtPnNpX2RydjE7CisgICAgcmV0dXJuICgwKTsK K30KKworaW50CittcnNhc19jbG9zZShzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgZmZsYWcsIGludCBk ZXZ0eXBlLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOwor CisgICAgc2MgPSBkZXYtPnNpX2RydjE7CisgICAgcmV0dXJuICgwKTsKK30KKworaW50CittcnNh c19yZWFkKHN0cnVjdCBjZGV2ICpkZXYsIHN0cnVjdCB1aW8gKnVpbywgaW50IGlvZmxhZykKK3sK KyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXYtPnNpX2RydjE7Cisg ICAgcmV0dXJuICgwKTsKK30KK2ludAorbXJzYXNfd3JpdGUoc3RydWN0IGNkZXYgKmRldiwgc3Ry dWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2M7 CisKKyAgICBzYyA9IGRldi0+c2lfZHJ2MTsKKyAgICByZXR1cm4gKDApOworfQorCisvKiogCisg KiBSZWdpc3RlciBSZWFkL1dyaXRlIEZ1bmN0aW9ucyAKKyAqCisgKi8KK3ZvaWQKK21yc2FzX3dy aXRlX3JlZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHZhbHVlKQoreworICAgIGJ1c19zcGFjZV90YWdfdCAgICAgICAgIGJ1 c190YWcgPSBzYy0+YnVzX3RhZzsKKyAgICBidXNfc3BhY2VfaGFuZGxlX3QgICAgICBidXNfaGFu ZGxlID0gc2MtPmJ1c19oYW5kbGU7CisKKyAgICBidXNfc3BhY2Vfd3JpdGVfNChidXNfdGFnLCBi dXNfaGFuZGxlLCBvZmZzZXQsIHZhbHVlKTsKK30KKwordV9pbnQzMl90CittcnNhc19yZWFkX3Jl ZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0KQoreworICAgIGJ1c19zcGFjZV90 YWdfdCBidXNfdGFnID0gc2MtPmJ1c190YWc7CisgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJ1c19o YW5kbGUgPSBzYy0+YnVzX2hhbmRsZTsKKworICAgIHJldHVybigodV9pbnQzMl90KWJ1c19zcGFj ZV9yZWFkXzQoYnVzX3RhZywgYnVzX2hhbmRsZSwgb2Zmc2V0KSk7Cit9CisKKworLyoqIAorICog SW50ZXJydXB0IERpc2FibGUvRW5hYmxlL0NsZWFyIEZ1bmN0aW9ucyAKKyAqCisgKi8KK3ZvaWQg bXJzYXNfZGlzYWJsZV9pbnRyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQz Ml90IG1hc2sgPSAweEZGRkZGRkZGOworICAgIHVfaW50MzJfdCBzdGF0dXM7CisKKyAgICBtcnNh c193cml0ZV9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJvdW5kX2ludHJfbWFz ayksIG1hc2spOworICAgIC8qIER1bW15IHJlYWQgdG8gZm9yY2UgcGNpIGZsdXNoICovCisgICAg c3RhdHVzID0gbXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJv dW5kX2ludHJfbWFzaykpOworfQorCit2b2lkIG1yc2FzX2VuYWJsZV9pbnRyKHN0cnVjdCBtcnNh c19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQzMl90IG1hc2sgPSBNRklfRlVTSU9OX0VOQUJMRV9J TlRFUlJVUFRfTUFTSzsKKyAgICB1X2ludDMyX3Qgc3RhdHVzOworCisgICAgbXJzYXNfd3JpdGVf cmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9pbnRyX3N0YXR1cyksIH4w KTsKKyAgICBzdGF0dXMgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3Nl dCwgb3V0Ym91bmRfaW50cl9zdGF0dXMpKTsKKworICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zm c2V0b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfaW50cl9tYXNrKSwgfm1hc2spOworICAgIHN0 YXR1cyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3Vu ZF9pbnRyX21hc2spKTsKK30KKworc3RhdGljIGludCBtcnNhc19jbGVhcl9pbnRyKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQzMl90IHN0YXR1cywgZndfc3RhdHVzLCBmd19z dGF0ZTsKKworICAgIC8qIFJlYWQgcmVjZWl2ZWQgaW50ZXJydXB0ICovCisgICAgc3RhdHVzID0g bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJvdW5kX2ludHJf c3RhdHVzKSk7CisKKyAgICAvKiBJZiBGVyBzdGF0ZSBjaGFuZ2UgaW50ZXJydXB0IGlzIHJlY2Vp dmVkLCB3cml0ZSB0byBpdCBhZ2FpbiB0byBjbGVhciAqLworICAgIGlmIChzdGF0dXMgJiBNUlNB U19GV19TVEFURV9DSE5HX0lOVEVSUlVQVCkgeworICAgICAgICBmd19zdGF0dXMgPSBtcnNhc19y ZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKyAgICAgICAgZndfc3RhdGUg PSBmd19zdGF0dXMgJiBNRklfU1RBVEVfTUFTSzsKKyAgICAgICAgaWYgKGZ3X3N0YXRlID09IE1G SV9TVEFURV9GQVVMVCkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiRlcgaXMgaW4gRkFVTFQgc3RhdGUhXG4iKTsKKyAgICAgICAgICAgIGlmKHNjLT5vY3JfdGhy ZWFkX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICB3YWtldXAoJnNjLT5vY3JfY2hhbik7CisgICAg ICAgIH0KKyAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0 LCBvdXRib3VuZF9pbnRyX3N0YXR1cyksIHN0YXR1cyk7CisgICAgICAgIG1yc2FzX3JlYWRfcmVn KHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9pbnRyX3N0YXR1cykpOworICAg ICAgICByZXR1cm4oMSk7CisgICAgfQorCisgICAgLyogTm90IG91ciBpbnRlcnJ1cHQsIHNvIGp1 c3QgcmV0dXJuICovCisgICAgaWYgKCEoc3RhdHVzICYgTUZJX0ZVU0lPTl9FTkFCTEVfSU5URVJS VVBUX01BU0spKSAKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgLyogV2UgZ290IGEgcmVwbHkg aW50ZXJydXB0ICovCisgICAgcmV0dXJuKDEpOworfQorCisvKiogCisgKiBQQ0kgU3VwcG9ydCBG dW5jdGlvbnMgCisgKgorICovCitzdGF0aWMgc3RydWN0IG1yc2FzX2lkZW50ICogbXJzYXNfZmlu ZF9pZGVudChkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX2lkZW50ICpwY2lfZGV2 aWNlOworCisgICAgZm9yIChwY2lfZGV2aWNlPWRldmljZV90YWJsZTsgcGNpX2RldmljZS0+dmVu ZG9yICE9IDA7IHBjaV9kZXZpY2UrKykgCisgICAgeworICAgICAgICBpZiAoKHBjaV9kZXZpY2Ut PnZlbmRvciA9PSBwY2lfZ2V0X3ZlbmRvcihkZXYpKSAmJgorICAgICAgICAgICAgKHBjaV9kZXZp Y2UtPmRldmljZSA9PSBwY2lfZ2V0X2RldmljZShkZXYpKSAmJgorICAgICAgICAgICAgKChwY2lf ZGV2aWNlLT5zdWJ2ZW5kb3IgPT0gcGNpX2dldF9zdWJ2ZW5kb3IoZGV2KSkgfHwKKyAgICAgICAg ICAgIChwY2lfZGV2aWNlLT5zdWJ2ZW5kb3IgPT0gMHhmZmZmKSkgJiYKKyAgICAgICAgICAgICgo cGNpX2RldmljZS0+c3ViZGV2aWNlID09IHBjaV9nZXRfc3ViZGV2aWNlKGRldikpIHx8CisgICAg ICAgICAgICAocGNpX2RldmljZS0+c3ViZGV2aWNlID09IDB4ZmZmZikpKQorICAgICAgICByZXR1 cm4gKHBjaV9kZXZpY2UpOworICAgIH0KKyAgICByZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMg aW50IG1yc2FzX3Byb2JlKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfaWRlbnQg KmlkOworCXVuc2lnbmVkIGludCBmb3JjZSA9IDAsIGl2YXI7CisKKyAgICBpZiAoKGlkID0gbXJz YXNfZmluZF9pZGVudChkZXYpKSAhPSBOVUxMKSB7CisJCWlmIChpZC0+ZGV2aWNlID09IDB4MDA1 YiB8fCBpZC0+ZGV2aWNlID09IDB4MDA1ZCkgeworICAgICAgICAgICAgcmVzb3VyY2VfaW50X3Zh bHVlKCJtcnNhcyIsIDAsICJmdXNpb25fZm9yY2UiLCAmaXZhcik7CisKKwkJCWlmIChpdmFyID09 IDAgfHwgaXZhciA9PSAxKQorCQkgICAgICAgICAgICBmb3JjZSA9IGl2YXI7ICAKKworICAgICAg ICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAgICAgaWYgKGZv cmNlKQorICAgICAgICAgICAgCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworICAgICAgICAg ICAgICAgIC8vcmV0dXJuIChCVVNfUFJPQkVfU1BFQ0lGSUMpOyAgLy9naXZlIHByaW9yaXR5IHRv IE1GSSBkcml2ZXIKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgcmV0dXJuIChC VVNfUFJPQkVfTE9XX1BSSU9SSVRZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIAorICAgICAg ICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAgICAgcmV0dXJu IChCVVNfUFJPQkVfREVGQVVMVCk7CisgICAgfQorICAgIHJldHVybiAoRU5YSU8pOworCit9Cisv KioKKyAqIG1yc2FzX3NldHVwX3N5c2N0bDogIHNldHVwIHN5c2N0bCB2YWx1ZXMgZm9yIG1yc2Fz CisgKiBpbnB1dDogICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAq CisgKiBTZXR1cCBzeXNjdGwgZW50cmllcyBmb3IgbXJzYXMgZHJpdmVyLgorICovCitzdGF0aWMg dm9pZAorbXJzYXNfc2V0dXBfc3lzY3RsKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAg c3RydWN0IHN5c2N0bF9jdHhfbGlzdCAgKnN5c2N0bF9jdHggPSBOVUxMOworICAgIHN0cnVjdCBz eXNjdGxfb2lkICAgICAgICpzeXNjdGxfdHJlZSA9IE5VTEw7CisgICAgY2hhciB0bXBzdHJbODBd LCB0bXBzdHIyWzgwXTsKKworICAgIC8qCisgICAgICogU2V0dXAgdGhlIHN5c2N0bCB2YXJpYWJs ZSBzbyB0aGUgdXNlciBjYW4gY2hhbmdlIHRoZSBkZWJ1ZyBsZXZlbAorICAgICAqIG9uIHRoZSBm bHkuCisgICAgICovCisgICAgc25wcmludGYodG1wc3RyLCBzaXplb2YodG1wc3RyKSwgIk1SU0FT IGNvbnRyb2xsZXIgJWQiLAorICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSk7Cisg ICAgc25wcmludGYodG1wc3RyMiwgc2l6ZW9mKHRtcHN0cjIpLCAiJWQiLCBkZXZpY2VfZ2V0X3Vu aXQoc2MtPm1yc2FzX2RldikpOworCisgICAgc3lzY3RsX2N0eCA9IGRldmljZV9nZXRfc3lzY3Rs X2N0eChzYy0+bXJzYXNfZGV2KTsKKyAgICBpZiAoc3lzY3RsX2N0eCAhPSBOVUxMKQorICAgICAg ICBzeXNjdGxfdHJlZSA9IGRldmljZV9nZXRfc3lzY3RsX3RyZWUoc2MtPm1yc2FzX2Rldik7CisK KyAgICBpZiAoc3lzY3RsX3RyZWUgPT0gTlVMTCkgeworICAgICAgICBzeXNjdGxfY3R4X2luaXQo JnNjLT5zeXNjdGxfY3R4KTsKKyAgICAgICAgc2MtPnN5c2N0bF90cmVlID0gU1lTQ1RMX0FERF9O T0RFKCZzYy0+c3lzY3RsX2N0eCwKKyAgICAgICAgICAgIFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4o X2h3X21yc2FzKSwgT0lEX0FVVE8sIHRtcHN0cjIsCisgICAgICAgICAgICBDVExGTEFHX1JELCAw LCB0bXBzdHIpOworICAgICAgICBpZiAoc2MtPnN5c2N0bF90cmVlID09IE5VTEwpCisgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICBzeXNjdGxfY3R4ID0gJnNjLT5zeXNjdGxfY3R4OworICAg ICAgICBzeXNjdGxfdHJlZSA9IHNjLT5zeXNjdGxfdHJlZTsKKyAgICB9CisgICAgU1lTQ1RMX0FE RF9VSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNjdGxfdHJlZSksCisgICAgICAg IE9JRF9BVVRPLCAiZGlzYWJsZV9vY3IiLCBDVExGTEFHX1JXLCAmc2MtPmRpc2FibGVPbmxpbmVD dHJsUmVzZXQsIDAsCisgICAgICAgICJEaXNhYmxlIHRoZSB1c2Ugb2YgT0NSIik7CisKKyAgICBT WVNDVExfQUREX1NUUklORyhzeXNjdGxfY3R4LCBTWVNDVExfQ0hJTERSRU4oc3lzY3RsX3RyZWUp LAorICAgICAgICBPSURfQVVUTywgImRyaXZlcl92ZXJzaW9uIiwgQ1RMRkxBR19SRCwgTVJTQVNf VkVSU0lPTiwKKyAgICAgICAgc3RybGVuKE1SU0FTX1ZFUlNJT04pLCAiZHJpdmVyIHZlcnNpb24i KTsKKworICAgIFNZU0NUTF9BRERfSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNj dGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAicmVzZXRfY291bnQiLCBDVExGTEFHX1JELAor ICAgICAgICAmc2MtPnJlc2V0X2NvdW50LCAwLCAibnVtYmVyIG9mIG9jciBmcm9tIHN0YXJ0IG9m IHRoZSBkYXkiKTsKKworICAgIFNZU0NUTF9BRERfSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElM RFJFTihzeXNjdGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAiZndfb3V0c3RhbmRpbmciLCBD VExGTEFHX1JELAorICAgICAgICAmc2MtPmZ3X291dHN0YW5kaW5nLCAwLCAiRlcgb3V0c3RhbmRp bmcgY29tbWFuZHMiKTsKKworICAgICBTWVNDVExfQUREX0lOVChzeXNjdGxfY3R4LCBTWVNDVExf Q0hJTERSRU4oc3lzY3RsX3RyZWUpLAorICAgICAgICBPSURfQVVUTywgImlvX2NtZHNfaGlnaHdh dGVyIiwgQ1RMRkxBR19SRCwKKyAgICAgICAgJnNjLT5pb19jbWRzX2hpZ2h3YXRlciwgMCwgIk1h eCBGVyBvdXRzdGFuZGluZyBjb21tYW5kcyIpOworCisgICAgU1lTQ1RMX0FERF9VSU5UKHN5c2N0 bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNjdGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAi bXJzYXNfZGVidWciLCBDVExGTEFHX1JXLCAmc2MtPm1yc2FzX2RlYnVnLCAwLAorICAgICAgICAi RHJpdmVyIGRlYnVnIGxldmVsIik7CisKKyAgICBTWVNDVExfQUREX1VJTlQoc3lzY3RsX2N0eCwg U1lTQ1RMX0NISUxEUkVOKHN5c2N0bF90cmVlKSwKKyAgICAgICAgT0lEX0FVVE8sICJtcnNhc19p b190aW1lb3V0IiwgQ1RMRkxBR19SVywgJnNjLT5tcnNhc19pb190aW1lb3V0LAorICAgICAgICAw LCAiRHJpdmVyIElPIHRpbWVvdXQgdmFsdWUgaW4gbWlsaS1zZWNvbmQuIik7CisKKyAgICBTWVND VExfQUREX1VJTlQoc3lzY3RsX2N0eCwgU1lTQ1RMX0NISUxEUkVOKHN5c2N0bF90cmVlKSwKKyAg ICAgICAgT0lEX0FVVE8sICJtcnNhc19md19mYXVsdF9jaGVja19kZWxheSIsIENUTEZMQUdfUlcs CisgICAgICAgICZzYy0+bXJzYXNfZndfZmF1bHRfY2hlY2tfZGVsYXksCisgICAgICAgIDAsICJG VyBmYXVsdCBjaGVjayB0aHJlYWQgZGVsYXkgaW4gc2Vjb25kcy4gPGRlZmF1bHQgaXMgMSBzZWM+ Iik7CisKKyAgICBTWVNDVExfQUREX0lOVChzeXNjdGxfY3R4LCBTWVNDVExfQ0hJTERSRU4oc3lz Y3RsX3RyZWUpLAorICAgICAgICBPSURfQVVUTywgInJlc2V0X2luX3Byb2dyZXNzIiwgQ1RMRkxB R19SRCwKKyAgICAgICAgJnNjLT5yZXNldF9pbl9wcm9ncmVzcywgMCwgIm9jciBpbiBwcm9ncmVz cyBzdGF0dXMiKTsKKworfQorCisvKioKKyAqIG1yc2FzX2dldF90dW5hYmxlczogIGdldCB0dW5h YmxlIHBhcmFtZXRlcnMuCisgKiBpbnB1dDogICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNl IHNvZnQgc3RhdGUKKyAqCisgKiBHZXQgdHVuYWJsZSBwYXJhbWV0ZXJzLiBUaGlzIHdpbGwgaGVs cCB0byBkZWJ1ZyBkcml2ZXIgYXQgYm9vdCB0aW1lLgorICovCitzdGF0aWMgdm9pZAorbXJzYXNf Z2V0X3R1bmFibGVzKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgY2hhciB0bXBzdHJb ODBdOworCisgICAgLyogWFhYIGRlZmF1bHQgdG8gc29tZSBkZWJ1Z2dpbmcgZm9yIG5vdyAqLwor ICAgIHNjLT5tcnNhc19kZWJ1ZyA9IE1SU0FTX0ZBVUxUOworICAgIHNjLT5tcnNhc19pb190aW1l b3V0ID0gTVJTQVNfSU9fVElNRU9VVDsKKyAgICBzYy0+bXJzYXNfZndfZmF1bHRfY2hlY2tfZGVs YXkgPSAxOworICAgIHNjLT5yZXNldF9jb3VudCA9IDA7CisgICAgc2MtPnJlc2V0X2luX3Byb2dy ZXNzID0gMDsKKworICAgIC8qCisgICAgICogR3JhYiB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4KKyAg ICAgKi8KKyAgICBUVU5BQkxFX0lOVF9GRVRDSCgiaHcubXJzYXMuZGVidWdfbGV2ZWwiLCAmc2Mt Pm1yc2FzX2RlYnVnKTsKKworICAgIC8qIEdyYWIgdGhlIHVuaXQtaW5zdGFuY2UgdmFyaWFibGVz ICovCisgICAgc25wcmludGYodG1wc3RyLCBzaXplb2YodG1wc3RyKSwgImRldi5tcnNhcy4lZC5k ZWJ1Z19sZXZlbCIsCisgICAgICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSk7Cisg ICAgVFVOQUJMRV9JTlRfRkVUQ0godG1wc3RyLCAmc2MtPm1yc2FzX2RlYnVnKTsKK30KKworLyoq CisgKiBtcnNhc19hbGxvY19ldnRfbG9nX2luZm8gY21kOglBbGxvY2F0ZXMgbWVtb3J5IHRvIGdl dCBldmVudCBsb2cgaW5mb3JtYXRpb24uCisgKiAJCQkJCQkJCSAgCVVzZWQgdG8gZ2V0IHNlcXVl bmNlIG51bWJlciBhdCBkcml2ZXIgbG9hZCB0aW1lLgorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgICAgIAkgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBBbGxvY2F0ZXMgRE1BYWJsZSBt ZW1vcnkgZm9yIHRoZSBldmVudCBsb2cgaW5mbyBpbnRlcm5hbCBjb21tYW5kLgorICovCitpbnQg bXJzYXNfYWxsb2NfZXZ0X2xvZ19pbmZvX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQorewor ICAgIGludCBlbF9pbmZvX3NpemU7CisKKyAgICAvKiBBbGxvY2F0ZSBnZXQgZXZlbnQgbG9nIGlu Zm8gY29tbWFuZCAqLworICAgIGVsX2luZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXJzYXNfZXZ0 X2xvZ19pbmZvKTsKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50 X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAgICAg ICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRkcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGZpbHRlciwg ZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxfaW5mb19zaXplLCAgICAg ICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAg ICAgICAgICAgICAgLy8gbXNlZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxf aW5mb19zaXplLCAgICAgICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+ZWxfaW5mb190YWcpKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBldmVudCBsb2cg aW5mbyB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChi dXNfZG1hbWVtX2FsbG9jKHNjLT5lbF9pbmZvX3RhZywgKHZvaWQgKiopJnNjLT5lbF9pbmZvX21l bSwKKyAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmc2MtPmVsX2luZm9fZG1hbWFwKSkgewor ICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgZXZl bnQgbG9nIGluZm8gY21kIG1lbVxuIik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9 CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+ZWxfaW5mb190YWcsIHNjLT5lbF9pbmZvX2Rt YW1hcCwKKyAgICAgICAgICAgIHNjLT5lbF9pbmZvX21lbSwgZWxfaW5mb19zaXplLCBtcnNhc19h ZGRyX2NiLAorICAgICAgICAgICAgJnNjLT5lbF9pbmZvX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dB SVQpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2Fk IGV2ZW50IGxvZyBpbmZvIGNtZCBtZW1cbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7Cisg ICAgfQorCisgICAgbWVtc2V0KHNjLT5lbF9pbmZvX21lbSwgMCwgZWxfaW5mb19zaXplKTsKKyAg ICByZXR1cm4gKDApOworfQorCisvKioKKyAqIG1yc2FzX2ZyZWVfZXZ0X2luZm9fY21kOiAJRnJl ZSBtZW1vcnkgZm9yIEV2ZW50IGxvZyBpbmZvIGNvbW1hbmQgCisgKiBpbnB1dDogICAgICAgICAg ICAgICAgICAgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBEZWFsbG9jYXRlcyBtZW1vcnkg Zm9yIHRoZSBldmVudCBsb2cgaW5mbyBpbnRlcm5hbCBjb21tYW5kLgorICovCit2b2lkIG1yc2Fz X2ZyZWVfZXZ0X2xvZ19pbmZvX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGlm IChzYy0+ZWxfaW5mb19waHlzX2FkZHIpCisgICAgICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5l bF9pbmZvX3RhZywgc2MtPmVsX2luZm9fZG1hbWFwKTsKKyAgICBpZiAoc2MtPmVsX2luZm9fbWVt ICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFtZW1fZnJlZShzYy0+ZWxfaW5mb190YWcsIHNjLT5l bF9pbmZvX21lbSwgc2MtPmVsX2luZm9fZG1hbWFwKTsKKyAgICBpZiAoc2MtPmVsX2luZm9fdGFn ICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmVsX2luZm9fdGFnKTsK K30KKworLyoqCisgKiAgbXJzYXNfZ2V0X3NlcV9udW06CUdldCBsYXRlc3QgZXZlbnQgc2VxdWVu Y2UgbnVtYmVyCisgKiAgQHNjOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICBAZWxpOgkJCQlG aXJtd2FyZSBldmVudCBsb2cgc2VxdWVuY2UgbnVtYmVyIGluZm9ybWF0aW9uLgorICoJCQkJCQlG aXJtd2FyZSBtYWludGFpbnMgYSBsb2cgb2YgYWxsIGV2ZW50cyBpbiBhIG5vbi12b2xhdGlsZSBh cmVhLgorICoJCQkJCQlEcml2ZXIgZ2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgdXNpbmcgRENNRAor ICoJCQkJCQkiTVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPIiBhdCBkcml2ZXIgbG9hZCB0aW1l LgorICovCisKK3N0YXRpYyBpbnQKK21yc2FzX2dldF9zZXFfbnVtKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsCisJCSAgICBzdHJ1Y3QgbXJzYXNfZXZ0X2xvZ19pbmZvICplbGkpCit7CisJc3RydWN0 IG1yc2FzX21maV9jbWQgKmNtZDsKKwlzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwor CWNtZCA9ICBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisKKwlpZiAoIWNtZCkgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJGYWlsZWQgdG8gZ2V0IGEgZnJlZSBjbWRcbiIpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwlpZiAo bXJzYXNfYWxsb2NfZXZ0X2xvZ19pbmZvX2NtZChzYykgIT0gU1VDQ0VTUykgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgZXZ0IGxvZyBpbmZvIGNtZFxu Iik7CisJCW1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisJCisJbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKwlkY21kLT5j bWQgPSBNRklfQ01EX0RDTUQ7CisJZGNtZC0+Y21kX3N0YXR1cyA9IDB4MDsKKwlkY21kLT5zZ2Vf Y291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRp bWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKKwlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6 ZW9mKHN0cnVjdCBtcnNhc19ldnRfbG9nX2luZm8pOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURf Q1RSTF9FVkVOVF9HRVRfSU5GTzsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gc2Mt PmVsX2luZm9fcGh5c19hZGRyOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yo c3RydWN0IG1yc2FzX2V2dF9sb2dfaW5mbyk7CisKKwltcnNhc19pc3N1ZV9ibG9ja2VkX2NtZChz YywgY21kKTsKKworCS8qCisgCSAqIENvcHkgdGhlIGRhdGEgYmFjayBpbnRvIGNhbGxlcnMgYnVm ZmVyCisgCSAqLworCW1lbWNweShlbGksIHNjLT5lbF9pbmZvX21lbSwgc2l6ZW9mKHN0cnVjdCBt cnNhc19ldnRfbG9nX2luZm8pKTsKKwltcnNhc19mcmVlX2V2dF9sb2dfaW5mb19jbWQoc2MpOwor CW1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisg KiAgbXJzYXNfcmVnaXN0ZXJfYWVuOgkJUmVnaXN0ZXIgZm9yIGFzeW5jaHJvbm91cyBldmVudCBu b3RpZmljYXRpb24KKyAqICBAc2M6CQkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICBAc2VxX251 bToJCQkJU3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisgKiAgQGNsYXNzX2xvY2FsZToJCQlDbGFz cyBvZiB0aGUgZXZlbnQKKyAqICAJCQkJCQlUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgZm9yIGV2 ZW50cyBiZXlvbmQgdGhlIEBzZXFfbnVtIAorICogIAkJCQkJCWFuZCB0eXBlIEBjbGFzc19sb2Nh bGUuCisgKiAKKyAqICovCitzdGF0aWMgaW50CittcnNhc19yZWdpc3Rlcl9hZW4oc3RydWN0IG1y c2FzX3NvZnRjICpzYywgdV9pbnQzMl90IHNlcV9udW0sCisJCSAgICAgdV9pbnQzMl90IGNsYXNz X2xvY2FsZV93b3JkKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBtcnNhc19tZmlfY21kICpj bWQ7CisJc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJdW5pb24gbXJzYXNfZXZ0X2Ns YXNzX2xvY2FsZSBjdXJyX2FlbjsKKwl1bmlvbiBtcnNhc19ldnRfY2xhc3NfbG9jYWxlIHByZXZf YWVuOworCisvKgorICogIElmIHRoZXJlIGFuIEFFTiBwZW5kaW5nIGFscmVhZHkgKGFlbl9jbWQp LCBjaGVjayBpZiB0aGUKKyAqICBjbGFzc19sb2NhbGUgb2YgdGhhdCBwZW5kaW5nIEFFTiBpcyBp bmNsdXNpdmUgb2YgdGhlIG5ldworICogIEFFTiByZXF1ZXN0IHdlIGN1cnJlbnRseSBoYXZlLiBJ ZiBpdCBpcywgdGhlbiB3ZSBkb24ndCBoYXZlCisgKiAgdG8gZG8gYW55dGhpbmcuIEluIG90aGVy IHdvcmRzLCB3aGljaGV2ZXIgZXZlbnRzIHRoZSBjdXJyZW50CisgKiAgQUVOIHJlcXVlc3QgaXMg c3Vic2NyaWJpbmcgdG8sIGhhdmUgYWxyZWFkeSBiZWVuIHN1YnNjcmliZWQKKyAqICB0by4KKyAq ICBJZiB0aGUgb2xkX2NtZCBpcyBfbm90XyBpbmNsdXNpdmUsIHRoZW4gd2UgaGF2ZSB0byBhYm9y dAorICogIHRoYXQgY29tbWFuZCwgZm9ybSBhIGNsYXNzX2xvY2FsZSB0aGF0IGlzIHN1cGVyc2V0 IG9mIGJvdGgKKyAqICBvbGQgYW5kIGN1cnJlbnQgYW5kIHJlLWlzc3VlIHRvIHRoZSBGVworICog Ki8KKworCWN1cnJfYWVuLndvcmQgPSBjbGFzc19sb2NhbGVfd29yZDsKKworCWlmIChzYy0+YWVu X2NtZCkgeworCisJCXByZXZfYWVuLndvcmQgPSBzYy0+YWVuX2NtZC0+ZnJhbWUtPmRjbWQubWJv eC53WzFdOworCisvKgorICogQSBjbGFzcyB3aG9zZSBlbnVtIHZhbHVlIGlzIHNtYWxsZXIgaXMg aW5jbHVzaXZlIG9mIGFsbAorICogaGlnaGVyIHZhbHVlcy4gSWYgYSBQUk9HUkVTUyAoPSAtMSkg d2FzIHByZXZpb3VzbHkKKyAqIHJlZ2lzdGVyZWQsIHRoZW4gYSBuZXcgcmVnaXN0cmF0aW9uIHJl cXVlc3RzIGZvciBoaWdoZXIKKyAqIGNsYXNzZXMgbmVlZCBub3QgYmUgc2VudCB0byBGVy4gVGhl eSBhcmUgYXV0b21hdGljYWxseQorICogaW5jbHVkZWQuCisgKiBMb2NhbGUgbnVtYmVycyBkb24n dCBoYXZlIHN1Y2ggaGllcmFyY2h5LiBUaGV5IGFyZSBiaXRtYXAgdmFsdWVzCisgKi8KKwkJaWYg KChwcmV2X2Flbi5tZW1iZXJzLmNsYXNzIDw9IGN1cnJfYWVuLm1lbWJlcnMuY2xhc3MpICYmCisJ ICAgIAkhKChwcmV2X2Flbi5tZW1iZXJzLmxvY2FsZSAmIGN1cnJfYWVuLm1lbWJlcnMubG9jYWxl KSBeCisJICAgICAgCWN1cnJfYWVuLm1lbWJlcnMubG9jYWxlKSkgeworCQkJLyoKKyAgCQkJICog UHJldmlvdXNseSBpc3N1ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGluY2x1ZGVzCisgIAkJCSAqIGN1 cnJlbnQgcmVxdWVzdC4gTm90aGluZyB0byBkby4KKyAgCQkJICovCisJCQlyZXR1cm4gMDsKKwkJ fSBlbHNlIHsKKwkJCWN1cnJfYWVuLm1lbWJlcnMubG9jYWxlIHw9IHByZXZfYWVuLm1lbWJlcnMu bG9jYWxlOworCisJCQlpZiAocHJldl9hZW4ubWVtYmVycy5jbGFzcyA8IGN1cnJfYWVuLm1lbWJl cnMuY2xhc3MpCisJCQkJY3Vycl9hZW4ubWVtYmVycy5jbGFzcyA9IHByZXZfYWVuLm1lbWJlcnMu Y2xhc3M7CisKKwkJCXNjLT5hZW5fY21kLT5hYm9ydF9hZW4gPSAxOworCQkJcmV0X3ZhbCA9IG1y c2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKHNjLAorCQkJCSAgc2MtPmFlbl9jbWQpOworCisJ CQlpZiAocmV0X3ZhbCkgeworCQkJCXByaW50ZigibXJzYXM6IEZhaWxlZCB0byBhYm9ydCAiCisJ CQkJCSAgICJwcmV2aW91cyBBRU4gY29tbWFuZFxuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJ CQl9CisJCX0KKwl9CisKKwljbWQgPSAgbXJzYXNfZ2V0X21maV9jbWQoc2MpOworCisJaWYgKCFj bWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJ bWVtc2V0KHNjLT5ldnRfZGV0YWlsX21lbSwgMCwgc2l6ZW9mKHN0cnVjdCBtcnNhc19ldnRfZGV0 YWlsKSk7CisKKy8qCisgKiBQcmVwYXJlIERDTUQgZm9yIGFlbiByZWdpc3RyYXRpb24KKyAqLwor CW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0g TUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweDA7CisJZGNtZC0+c2dlX2NvdW50 ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwlkY21kLT50aW1lb3V0 ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihz dHJ1Y3QgbXJzYXNfZXZ0X2RldGFpbCk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VW RU5UX1dBSVQ7CisJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKKyAgICBzYy0+bGFzdF9zZXFf bnVtID0gc2VxX251bTsKKwlkY21kLT5tYm94LndbMV0gPSBjdXJyX2Flbi53b3JkOworCWRjbWQt PnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSAodV9pbnQzMl90KSBzYy0+ZXZ0X2RldGFpbF9waHlz X2FkZHI7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbXJzYXNf ZXZ0X2RldGFpbCk7CisKKwlpZiAoc2MtPmFlbl9jbWQgIT0gTlVMTCkgeworCQltcnNhc19yZWxl YXNlX21maV9jbWQoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKyAgCSAqIFN0b3JlIHJl ZmVyZW5jZSB0byB0aGUgY21kIHVzZWQgdG8gcmVnaXN0ZXIgZm9yIEFFTi4gV2hlbiBhbgorICAJ ICogYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcmVnaXN0ZXIgZm9yIEFFTiwgd2UgaGF2ZSB0byBh Ym9ydCB0aGlzCisgICAJICogY21kIGFuZCByZS1yZWdpc3RlciB3aXRoIGEgbmV3IEVWRU5UIExP Q0FMRSBzdXBwbGllZCBieSB0aGF0IGFwcAorICAJICovCisJc2MtPmFlbl9jbWQgPSBjbWQ7CisK KwkvKgorICAJICBJc3N1ZSB0aGUgYWVuIHJlZ2lzdHJhdGlvbiBmcmFtZQorICAJKi8KKyAgCWlm IChtcnNhc19pc3N1ZV9kY21kKHNjLCBjbWQpKXsKKyAgICAgICAJZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiQ2Fubm90IGlzc3VlIEFFTiBEQ01EIGNvbW1hbmQuXG4iKTsKKyAgICAgICAJ cmV0dXJuKDEpOworICAgCX0KKworCXJldHVybiAwOworfQorLyoqCisgKiBtcnNhc19zdGFydF9h ZW4gLSAgU3Vic2NyaWJlcyB0byBBRU4gZHVyaW5nIGRyaXZlciBsb2FkIHRpbWUKKyAqIEBpbnN0 YW5jZTogICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICovCitzdGF0aWMgaW50IG1yc2Fz X3N0YXJ0X2FlbihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworCXN0cnVjdCBtcnNhc19ldnRf bG9nX2luZm8gZWxpOworCXVuaW9uIG1yc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxl OworCisKKwkvKiBHZXQgdGhlIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgZnJvbSBGVyovCisJCQkK KwltZW1zZXQoJmVsaSwgMCwgc2l6ZW9mKGVsaSkpOworCisJaWYgKG1yc2FzX2dldF9zZXFfbnVt KHNjLCAmZWxpKSkKKwkJcmV0dXJuIC0xOworCisJLyogUmVnaXN0ZXIgQUVOIHdpdGggRlcgZm9y IGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgcGx1cyAxKi8KKwljbGFzc19sb2NhbGUubWVtYmVycy5y ZXNlcnZlZCA9IDA7CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMubG9jYWxlID0gTVJfRVZUX0xPQ0FM RV9BTEw7CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMuY2xhc3MgPSBNUl9FVlRfQ0xBU1NfREVCVUc7 CisKKwlyZXR1cm4gbXJzYXNfcmVnaXN0ZXJfYWVuKHNjLCBlbGkubmV3ZXN0X3NlcV9udW0gKyAx LAorCQkJCWNsYXNzX2xvY2FsZS53b3JkKTsKK30KKworLyoqCisgKiBtcnNhc19hdHRhY2g6ICAg ICAgICAgICAgUENJIGVudHJ5IHBvaW50CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgZGV2 aWNlIHN0cnVjdCBwb2ludGVyIAorICogCisgKiBQZXJmb3JtcyBzZXR1cCBvZiBQQ0kgYW5kIHJl Z2lzdGVycywgaW5pdGlhbGl6ZXMgbXV0ZXhlcyBhbmQKKyAqIGxpbmtlZCBsaXN0cywgcmVnaXN0 ZXJzIGludGVycnVwdHMgYW5kIENBTSwgYW5kIGluaXRpYWxpemVzICAgCisgKiB0aGUgYWRhcHRl ci9jb250cm9sbGVyIHRvIGl0cyBwcm9wZXIgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNf YXR0YWNoKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVpbnQzMl90IGNtZCwgYmFyLCBlcnJvcjsKKyAgICBz dGF0aWMgdV9pbnQ4X3QgZmlyc3RfY3RybCA9IDE7CisKKyAgICAvKiBMb29rIHVwIG91ciBzb2Z0 YyBhbmQgaW5pdGlhbGl6ZSBpdHMgZmllbGRzLiAqLworICAgIHNjLT5tcnNhc19kZXYgPSBkZXY7 CisgICAgc2MtPmRldmljZV9pZCA9IHBjaV9nZXRfZGV2aWNlKGRldik7CisJCisJaWYgKHNjLT5k ZXZpY2VfaWQgPT0gMHgwMDViIHx8IHNjLT5kZXZpY2VfaWQgPT0gMHgwMDVkKSB7CisJCXByaW50 ZigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjXG4iKTsKKwkJcHJpbnRmKCI8bXJzYXM+IERyaXZlciBoYXMgZGV0ZWN0ZWQgTVItRnVzaW9u IENvbnRyb2xsZXIuIgorCQkJIklmIHlvdSB3aXNoIHRvIHN3aXRjaCB0byA8bWZpPiBkcml2ZXIg Zm9yIE1SLUZ1c2lvbiwiCisJCQkicmVhZCBtYW51YWwgb2YgbXJzYXMuIE9uY2UgeW91IGNob3Nl IHRvIHVzZSA8bXJzYXM+IERyaXZlciIKKwkJCSJmb3IgTVItRnVzaW9uIENvbnRyb2xsZXJzLCB5 b3Ugc2hvdWxkIG5vdCBzd2l0Y2ggdG8gPG1maT4uIgorCQkJIkxTSSByZWNvbW1lbmQgdG8gdXNl IDxtcnNhcz4gZHJpdmVyIGZvciBNUi1GdXNpb24uIgorCQkJIlVzZSA8bXJzYXM+IGlmIHlvdSBh cmUgbm90IHN1cmUgYWJvdXQgY2hvaWNlLiIpOworCQlwcmludGYoIlF1aWNrIGhlbHAgdG8gdXNl IDxtZmk+IGZvciBNUi1GdXN0aW9uIENhcmQ6IFxuIgorCQkJIiBSZW1vdmUgaGludC5tcnNhcy4w LmZ1c2lvbl9mb3JjZT0xIGZyb20gL2Jvb3QvZGV2aWNlLmhpbnRzLiBcbiIpOworCQlwcmludGYo IiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj I1xuIik7CisJfSAKKworCWlmIChmaXJzdF9jdHJsKSB7CisJCXByaW50ZigiTFNJIE1lZ2FSQUlE IFNBUyBGcmVlQlNEIG1yc2FzIgorCQkJCQkiIGRyaXZlciB2ZXJzaW9uOiAlc1xuIiwgTVJTQVNf VkVSU0lPTik7CisJCWZpcnN0X2N0cmwgPSAwOworCX0gCisgICAgbXJzYXNfZ2V0X3R1bmFibGVz KHNjKTsKKworICAgIC8qIAorICAgICAqIFNldCB1cCBQQ0kgYW5kIHJlZ2lzdGVycyAKKyAgICAg Ki8KKyAgICBjbWQgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOworICAg IGlmICggKGNtZCAmIFBDSU1fQ01EX1BPUlRFTikgPT0gMCkgeworICAgICAgICByZXR1cm4gKEVO WElPKTsKKyAgICB9CisgICAgLyogRm9yY2UgdGhlIGJ1c21hc3RlciBlbmFibGUgYml0IG9uLiAq LworICAgIGNtZCB8PSBQQ0lNX0NNRF9CVVNNQVNURVJFTjsKKyAgICBwY2lfd3JpdGVfY29uZmln KGRldiwgUENJUl9DT01NQU5ELCBjbWQsIDIpOworCisgICAgLy9iYXIgPSBwY2lfcmVhZF9jb25m aWcoZGV2LCBNUlNBU19QQ0lfQkFSMCwgNCk7CisgICAgYmFyID0gcGNpX3JlYWRfY29uZmlnKGRl diwgTVJTQVNfUENJX0JBUjEsIDQpOworCisgICAgc2MtPnJlZ19yZXNfaWQgPSBNUlNBU19QQ0lf QkFSMTsgLyogQkFSMSBvZmZzZXQgKi8KKyAgICBpZiAoKHNjLT5yZWdfcmVzID0gYnVzX2FsbG9j X3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYoc2MtPnJlZ19yZXNfaWQpLCAwLCB+MCwgMSwgUkZfQUNUSVZFKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPT0gTlVMTCkgeworICAgICAgICBkZXZpY2VfcHJpbnRm KGRldiwgIkNhbm5vdCBhbGxvY2F0ZSBQQ0kgcmVnaXN0ZXJzXG4iKTsKKyAgICAgICAgZ290byBh dHRhY2hfZmFpbDsKKyAgICB9CisgICAgc2MtPmJ1c190YWcgPSBybWFuX2dldF9idXN0YWcoc2Mt PnJlZ19yZXMpOworICAgIHNjLT5idXNfaGFuZGxlID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5y ZWdfcmVzKTsKKworICAgIC8qIEludGlhbGl6ZSBtdXRleGVzICovCisgICAgbXR4X2luaXQoJnNj LT5zaW1fbG9jaywgICJtcnNhc19zaW1fbG9jayIsIE5VTEwsIE1UWF9ERUYpOworICAgIG10eF9p bml0KCZzYy0+cGNpX2xvY2ssICAibXJzYXNfcGNpX2xvY2siLCBOVUxMLCBNVFhfREVGKTsKKyAg ICBtdHhfaW5pdCgmc2MtPmlvX2xvY2ssICAibXJzYXNfaW9fbG9jayIsIE5VTEwsIE1UWF9ERUYp OworICAgIG10eF9pbml0KCZzYy0+YWVuX2xvY2ssICAibXJzYXNfYWVuX2xvY2siLCBOVUxMLCBN VFhfREVGKTsKKyAgICBtdHhfaW5pdCgmc2MtPmlvY3RsX2xvY2ssICAibXJzYXNfaW9jdGxfbG9j ayIsIE5VTEwsIE1UWF9TUElOKTsKKyAgICBtdHhfaW5pdCgmc2MtPm1wdF9jbWRfcG9vbF9sb2Nr LCAibXJzYXNfbXB0X2NtZF9wb29sX2xvY2siLCBOVUxMLCBNVFhfREVGKTsKKyAgICBtdHhfaW5p dCgmc2MtPm1maV9jbWRfcG9vbF9sb2NrLCAibXJzYXNfbWZpX2NtZF9wb29sX2xvY2siLCBOVUxM LCBNVFhfREVGKTsKKyAgICBtdHhfaW5pdCgmc2MtPnJhaWRtYXBfbG9jaywgIm1yc2FzX3JhaWRt YXBfbG9jayIsIE5VTEwsIE1UWF9ERUYpOworCisgICAgLyogSW50aWFsaXplIGxpbmtlZCBsaXN0 ICovCisgICAgVEFJTFFfSU5JVCgmc2MtPm1yc2FzX21wdF9jbWRfbGlzdF9oZWFkKTsKKyAgICBU QUlMUV9JTklUKCZzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpOworCisgICAgYXRvbWljX3Nl dCgmc2MtPmZ3X291dHN0YW5kaW5nLDApOworCisgICAgc2MtPmlvX2NtZHNfaGlnaHdhdGVyID0g MDsKKworICAgIC8qIENyZWF0ZSBhIC9kZXYgZW50cnkgZm9yIHRoaXMgZGV2aWNlLiAqLworICAg IHNjLT5tcnNhc19jZGV2ID0gbWFrZV9kZXYoJm1yc2FzX2NkZXZzdywgZGV2aWNlX2dldF91bml0 KGRldiksIFVJRF9ST09ULAorICAgICAgICBHSURfT1BFUkFUT1IsIChTX0lSVVNSIHwgU19JV1VT UiB8IFNfSVJHUlAgfCBTX0lXR1JQKSwgIm1yc2FzJXUiLAorICAgICAgICBkZXZpY2VfZ2V0X3Vu aXQoZGV2KSk7CisgICAgaWYgKHNjLT5tcnNhc19jZGV2KQorICAgIAlzYy0+bXJzYXNfY2Rldi0+ c2lfZHJ2MSA9IHNjOworCisgICAgc2MtPmFkcHJlY292ZXJ5ID0gTVJTQVNfSEJBX09QRVJBVElP TkFMOworCisgICAgLyogSW5pdGlhbGl6ZSBGaXJtd2FyZSAqLworICAgIGlmIChtcnNhc19pbml0 X2Z3KHNjKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYXR0YWNoX2ZhaWxfZnc7CisgICAg fQorCisgICAgLyogQWxsb2NhdGUgYW5kIHNldCB1cCBSQUlEIG1hcCAqLworICAgIGlmIChtcnNh c19zZXR1cF9yYWlkbWFwKHNjKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYXR0YWNoX2Zh aWxfcmFpZG1hcDsKKyAgICB9CisKKyAgICAvKiBSZWdpc3RlciBTQ1NJIG1pZC1sYXllciAqLwor ICAgIGlmICgobXJzYXNfY2FtX2F0dGFjaChzYykgIT0gU1VDQ0VTUykpIHsKKyAgICAgICAgZ290 byBhdHRhY2hfZmFpbF9jYW07CisgICAgfQorCisgICAgLyogUmVnaXN0ZXIgSVJRcyAqLworICAg IGlmIChtcnNhc19zZXR1cF9pcnEoc2MpICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZ290byBhdHRh Y2hfZmFpbF9pcnE7CisgICAgfQorCisgICAgLyogRW5hYmxlIEludGVycnVwdHMgKi8KKyAgICBt cnNhc19lbmFibGVfaW50cihzYyk7CisKKyAgICBlcnJvciA9IG1yc2FzX2twcm9jX2NyZWF0ZSht cnNhc19vY3JfdGhyZWFkLCBzYywKKyAgICAgICAgJnNjLT5vY3JfdGhyZWFkLCAwLCAwLCAibXJz YXNfb2NyJWQiLAorICAgICAgICBkZXZpY2VfZ2V0X3VuaXQoc2MtPm1yc2FzX2RldikpOworICAg IGlmIChlcnJvcikgeworICAgICAgICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIHJlc2NhbiB0 aHJlYWRcbiIsIGVycm9yKTsKKyAgICAgICAgZ290byBhdHRhY2hfZmFpbF9pcnE7CisgICAgfQor CisgICAgbXJzYXNfc2V0dXBfc3lzY3RsKHNjKTsKKyAgICAgICAgCisJLyogSW5pdGlhdGUgQUVO IChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSovCisKKwlpZiAobXJzYXNfc3RhcnRf YWVuKHNjKSkgeworCQlwcmludGYoIkVycm9yOiBzdGFydCBhZW4gZmFpbGVkXG4iKTsKKwkJZ290 byBmYWlsX3N0YXJ0X2FlbjsKKwl9CisKKyAgICByZXR1cm4gKDApOworCitmYWlsX3N0YXJ0X2Fl bjoKK2F0dGFjaF9mYWlsX2lycToKKyAgICBtcnNhc190ZWFyZG93bl9pbnRyKHNjKTsKK2F0dGFj aF9mYWlsX2NhbToKKyAgICBtcnNhc19jYW1fZGV0YWNoKHNjKTsKK2F0dGFjaF9mYWlsX2Z3Ogor YXR0YWNoX2ZhaWxfcmFpZG1hcDoKKyAgICBtcnNhc19mcmVlX21lbShzYyk7CisgICAgbXR4X2Rl c3Ryb3koJnNjLT5zaW1fbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5hZW5fbG9jayk7Cisg ICAgbXR4X2Rlc3Ryb3koJnNjLT5wY2lfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5pb19s b2NrKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPmlvY3RsX2xvY2spOworICAgIG10eF9kZXN0cm95 KCZzYy0+bXB0X2NtZF9wb29sX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+bWZpX2NtZF9w b29sX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+cmFpZG1hcF9sb2NrKTsKK2F0dGFjaF9m YWlsOgorICAgIGRlc3Ryb3lfZGV2KHNjLT5tcnNhc19jZGV2KTsKKyAgICBpZiAoc2MtPnJlZ19y ZXMpeworICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+bXJzYXNfZGV2LCBTWVNfUkVT X01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2MtPnJlZ19yZXNfaWQsIHNj LT5yZWdfcmVzKTsKKyAgICB9CisgICAgcmV0dXJuIChFTlhJTyk7Cit9CisKKy8qKgorICogbXJz YXNfZGV0YWNoOiAgICAgICAgICAgIERlLWFsbG9jYXRlcyBhbmQgdGVhcmRvd24gcmVzb3VyY2Vz CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdCBwb2ludGVyIAorICog CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZGV2aWNlIGRpc2Nvbm5l Y3QgYW5kIGRldGFjaC4gIEl0CisgKiBwZXJmb3JtcyBtZW1vcnkgZGUtYWxsb2NhdGlvbnMsIHNo dXRkb3duIG9mIHRoZSBjb250cm9sbGVyIGFuZCB2YXJpb3VzIAorICogdGVhcmRvd24gYW5kIGRl c3Ryb3kgcmVzb3VyY2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50IG1yc2FzX2RldGFjaChk ZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX3NvZnRjICpzYzsKKyAgICBpbnQgaSA9 IDA7CisKKyAgICBzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzYy0+cmVtb3ZlX2lu X3Byb2dyZXNzID0gMTsKKyAgICBpZihzYy0+b2NyX3RocmVhZF9hY3RpdmUpCisgICAgICAgIHdh a2V1cCgmc2MtPm9jcl9jaGFuKTsKKyAgICB3aGlsZShzYy0+cmVzZXRfaW5fcHJvZ3Jlc3Mpewor ICAgICAgICBpKys7CisgICAgICAgIGlmICghKGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJW QUwpKSB7CisgICAgICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAgICAg ICAgICAgICAgIlslMmRdd2FpdGluZyBmb3Igb2NyIHRvIGJlIGZpbmlzaGVkXG4iLGkpOworICAg ICAgICB9CisgICAgICAgIHBhdXNlKCJtcl9zaHV0ZG93biIsIGh6KTsKKyAgICB9CisgICAgaSA9 IDA7CisgICAgd2hpbGUoc2MtPm9jcl90aHJlYWRfYWN0aXZlKXsKKyAgICAgICAgaSsrOworICAg ICAgICBpZiAoIShpICUgTVJTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMKSkgeworICAgICAgICAg ICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19JTkZPLAorICAgICAgICAgICAgICAgICJbJTJkXXdh aXRpbmcgZm9yICIKKyAgICAgICAgICAgICAgICAibXJzYXNfb2NyIHRocmVhZCB0byBxdWl0IG9j ciAlZFxuIixpLAorICAgICAgICAgICAgICAgICBzYy0+b2NyX3RocmVhZF9hY3RpdmUpOworICAg ICAgICB9CisgICAgICAgIHBhdXNlKCJtcl9zaHV0ZG93biIsIGh6KTsKKyAgICB9CisKKyAgICBt cnNhc19mbHVzaF9jYWNoZShzYyk7CisgICAgbXJzYXNfc2h1dGRvd25fY3RscihzYywgTVJfRENN RF9DVFJMX1NIVVRET1dOKTsKKyAgICBtcnNhc19kaXNhYmxlX2ludHIoc2MpOworICAgIG1yc2Fz X2NhbV9kZXRhY2goc2MpOworICAgIG1yc2FzX3RlYXJkb3duX2ludHIoc2MpOworICAgIG1yc2Fz X2ZyZWVfbWVtKHNjKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPnNpbV9sb2NrKTsKKyAgICBtdHhf ZGVzdHJveSgmc2MtPmFlbl9sb2NrKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPnBjaV9sb2NrKTsK KyAgICBtdHhfZGVzdHJveSgmc2MtPmlvX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+aW9j dGxfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5tcHRfY21kX3Bvb2xfbG9jayk7CisgICAg bXR4X2Rlc3Ryb3koJnNjLT5tZmlfY21kX3Bvb2xfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNj LT5yYWlkbWFwX2xvY2spOworICAgIGlmIChzYy0+cmVnX3Jlcyl7CisgICAgICAgIGJ1c19yZWxl YXNlX3Jlc291cmNlKHNjLT5tcnNhc19kZXYsCisgICAgICAgICAgICAgICAgIFNZU19SRVNfTUVN T1JZLCBzYy0+cmVnX3Jlc19pZCwgc2MtPnJlZ19yZXMpOworICAgIH0KKyAgICBkZXN0cm95X2Rl dihzYy0+bXJzYXNfY2Rldik7CisgICAgaWYgKHNjLT5zeXNjdGxfdHJlZSAhPSBOVUxMKQorICAg ICAgICBzeXNjdGxfY3R4X2ZyZWUoJnNjLT5zeXNjdGxfY3R4KTsKKyAgICByZXR1cm4gKDApOwor fQorCisvKioKKyAqIG1yc2FzX2ZyZWVfbWVtOiAgICAgICAgICBGcmVlcyBhbGxvY2F0ZWQgbWVt b3J5IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBz dGF0ZQorICogCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG1yc2FzX2RldGFjaCgp IHRvIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAqIG1lbW9yeS4gIAorICovCit2b2lkIG1y c2FzX2ZyZWVfbWVtKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaW50IGk7CisgICAg dV9pbnQzMl90IG1heF9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKm1maV9jbWQ7Cisg ICAgc3RydWN0IG1yc2FzX21wdF9jbWQgKm1wdF9jbWQ7CisgICAgCisJLyoKKyAgICAgKiBGcmVl IFJBSUQgbWFwIG1lbW9yeQorICAgICAqLworICAgIGZvciAoaT0wOyBpIDwgMjsgaSsrKQorICAg IHsKKyAgICAgICAgaWYgKHNjLT5yYWlkbWFwX3BoeXNfYWRkcltpXSkKKyAgICAgICAgICAgIGJ1 c19kbWFtYXBfdW5sb2FkKHNjLT5yYWlkbWFwX3RhZ1tpXSwgc2MtPnJhaWRtYXBfZG1hbWFwW2ld KTsKKyAgICAgICAgaWYgKHNjLT5yYWlkbWFwX21lbVtpXSAhPSBOVUxMKQorICAgICAgICAgICAg YnVzX2RtYW1lbV9mcmVlKHNjLT5yYWlkbWFwX3RhZ1tpXSwgc2MtPnJhaWRtYXBfbWVtW2ldLCBz Yy0+cmFpZG1hcF9kbWFtYXBbaV0pOworICAgICAgICBpZiAoc2MtPnJhaWRtYXBfdGFnW2ldICE9 IE5VTEwpCisgICAgICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5yYWlkbWFwX3RhZ1tp XSk7CisgICAgfQorCisgICAgLyogCisgICAgICogRnJlZSB2ZXJzaW9uIGJ1ZmZlciBtZW1yb3kg CisgICAgICovCisgICAgaWYgKHNjLT52ZXJidWZfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1h bWFwX3VubG9hZChzYy0+dmVyYnVmX3RhZywgc2MtPnZlcmJ1Zl9kbWFtYXApOworICAgIGlmIChz Yy0+dmVyYnVmX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPnZlcmJ1 Zl90YWcsIHNjLT52ZXJidWZfbWVtLCBzYy0+dmVyYnVmX2RtYW1hcCk7CisgICAgaWYgKHNjLT52 ZXJidWZfdGFnICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPnZlcmJ1 Zl90YWcpOworCQorCisgICAgLyogCisgICAgICogRnJlZSBzZW5zZSBidWZmZXIgbWVtb3J5IAor ICAgICAqLworICAgIGlmIChzYy0+c2Vuc2VfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFw X3VubG9hZChzYy0+c2Vuc2VfdGFnLCBzYy0+c2Vuc2VfZG1hbWFwKTsKKyAgICBpZiAoc2MtPnNl bnNlX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPnNlbnNlX3RhZywg c2MtPnNlbnNlX21lbSwgc2MtPnNlbnNlX2RtYW1hcCk7CisgICAgaWYgKHNjLT5zZW5zZV90YWcg IT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+c2Vuc2VfdGFnKTsKKwor ICAgIC8qIAorICAgICAqIEZyZWUgY2hhaW4gZnJhbWUgbWVtb3J5IAorICAgICAqLworICAgIGlm IChzYy0+Y2hhaW5fZnJhbWVfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFwX3VubG9hZChz Yy0+Y2hhaW5fZnJhbWVfdGFnLCBzYy0+Y2hhaW5fZnJhbWVfZG1hbWFwKTsKKyAgICBpZiAoc2Mt PmNoYWluX2ZyYW1lX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPmNo YWluX2ZyYW1lX3RhZywgc2MtPmNoYWluX2ZyYW1lX21lbSwgc2MtPmNoYWluX2ZyYW1lX2RtYW1h cCk7CisgICAgaWYgKHNjLT5jaGFpbl9mcmFtZV90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YV90YWdfZGVzdHJveShzYy0+Y2hhaW5fZnJhbWVfdGFnKTsKKworICAgIC8qIAorICAgICAqIEZy ZWUgSU8gUmVxdWVzdCBtZW1vcnkgCisgICAgICovCisgICAgaWYgKHNjLT5pb19yZXF1ZXN0X3Bo eXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmlvX3JlcXVlc3RfdGFnLCBz Yy0+aW9fcmVxdWVzdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9fcmVxdWVzdF9tZW0gIT0gTlVM TCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5pb19yZXF1ZXN0X3RhZywgc2MtPmlvX3Jl cXVlc3RfbWVtLCBzYy0+aW9fcmVxdWVzdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9fcmVxdWVz dF90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+aW9fcmVxdWVz dF90YWcpOworCisgICAgLyogCisgICAgICogRnJlZSBSZXBseSBEZXNjcmlwdG9yIG1lbW9yeSAK KyAgICAgKi8KKyAgICBpZiAoc2MtPnJlcGx5X2Rlc2NfcGh5c19hZGRyKQorICAgICAgICBidXNf ZG1hbWFwX3VubG9hZChzYy0+cmVwbHlfZGVzY190YWcsIHNjLT5yZXBseV9kZXNjX2RtYW1hcCk7 CisgICAgaWYgKHNjLT5yZXBseV9kZXNjX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVt X2ZyZWUoc2MtPnJlcGx5X2Rlc2NfdGFnLCBzYy0+cmVwbHlfZGVzY19tZW0sIHNjLT5yZXBseV9k ZXNjX2RtYW1hcCk7CisgICAgaWYgKHNjLT5yZXBseV9kZXNjX3RhZyAhPSBOVUxMKQorICAgICAg ICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5yZXBseV9kZXNjX3RhZyk7CisKKyAgICAvKiAKKyAg ICAgKiBGcmVlIGV2ZW50IGRldGFpbCBtZW1vcnkgCisgICAgICovCisgICAgaWYgKHNjLT5ldnRf ZGV0YWlsX3BoeXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmV2dF9kZXRh aWxfdGFnLCBzYy0+ZXZ0X2RldGFpbF9kbWFtYXApOworICAgIGlmIChzYy0+ZXZ0X2RldGFpbF9t ZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5ldnRfZGV0YWlsX3RhZywg c2MtPmV2dF9kZXRhaWxfbWVtLCBzYy0+ZXZ0X2RldGFpbF9kbWFtYXApOworICAgIGlmIChzYy0+ ZXZ0X2RldGFpbF90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ ZXZ0X2RldGFpbF90YWcpOworCisgICAgLyogCisgICAgICogRnJlZSBNRkkgZnJhbWVzIAorICAg ICAqLworCWlmIChzYy0+bWZpX2NtZF9saXN0KSB7CisgICAgCWZvciAoaSA9IDA7IGkgPCBNUlNB U19NQVhfTUZJX0NNRFM7IGkrKykgeworICAgICAgICAJbWZpX2NtZCA9IHNjLT5tZmlfY21kX2xp c3RbaV07CisgICAgICAgIAltcnNhc19mcmVlX2ZyYW1lKHNjLCBtZmlfY21kKTsKKwkJfQorICAg IH0KKyAgICBpZiAoc2MtPm1maWNtZF9mcmFtZV90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YV90YWdfZGVzdHJveShzYy0+bWZpY21kX2ZyYW1lX3RhZyk7CisKKyAgICAvKiAKKyAgICAgKiBG cmVlIE1QVCBpbnRlcm5hbCBjb21tYW5kIGxpc3QgCisgICAgICovCisgICAgbWF4X2NtZCA9IHNj LT5tYXhfZndfY21kczsKKwlpZiAoc2MtPm1wdF9jbWRfbGlzdCkgeworICAgIAlmb3IgKGkgPSAw OyBpIDwgbWF4X2NtZDsgaSsrKSB7CisgICAgICAgIAltcHRfY21kID0gc2MtPm1wdF9jbWRfbGlz dFtpXTsKKyAgICAgICAgCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZGF0YV90YWcsIG1wdF9jbWQt PmRhdGFfZG1hbWFwKTsgCisgICAgICAgIAlmcmVlKHNjLT5tcHRfY21kX2xpc3RbaV0sIE1fTVJT QVMpOworICAgIAl9CisgICAgCWZyZWUoc2MtPm1wdF9jbWRfbGlzdCwgTV9NUlNBUyk7CisgICAg CXNjLT5tcHRfY21kX2xpc3QgPSBOVUxMOworCX0KKworICAgIC8qCisgICAgICogRnJlZSBNRkkg aW50ZXJuYWwgY29tbWFuZCBsaXN0IAorICAgICAqLworCQorCWlmIChzYy0+bWZpX2NtZF9saXN0 KSB7CisgICAgCWZvciAoaSA9IDA7IGkgPCBNUlNBU19NQVhfTUZJX0NNRFM7IGkrKykgeworICAg ICAgICAJZnJlZShzYy0+bWZpX2NtZF9saXN0W2ldLCBNX01SU0FTKTsKKyAgICAJfQorICAgIAlm cmVlKHNjLT5tZmlfY21kX2xpc3QsIE1fTVJTQVMpOworICAgIAlzYy0+bWZpX2NtZF9saXN0ID0g TlVMTDsKKwl9CisKKyAgICAvKiAKKyAgICAgKiBGcmVlIHJlcXVlc3QgZGVzY3JpcHRvciBtZW1v cnkgCisgICAgICovCisgICAgZnJlZShzYy0+cmVxX2Rlc2MsIE1fTVJTQVMpOworICAgIHNjLT5y ZXFfZGVzYyA9IE5VTEw7CisKKyAgICAvKiAKKyAgICAgKiBEZXN0cm95IHBhcmVudCB0YWcgCisg ICAgICovCisgICAgaWYgKHNjLT5tcnNhc19wYXJlbnRfdGFnICE9IE5VTEwpCisgICAgICAgIGJ1 c19kbWFfdGFnX2Rlc3Ryb3koc2MtPm1yc2FzX3BhcmVudF90YWcpOworfQorCisvKioKKyAqIG1y c2FzX3RlYXJkb3duX2ludHI6ICAgICAgICBUZWFyZG93biBpbnRlcnJ1cHQgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKgorICog VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBtcnNhc19kZXRhY2goKSB0byB0ZWFyZG93biBh bmQgcmVsZWFzZQorICogYnVzIGludGVycnVwdCByZXNvdXJzZS4KKyAqLwordm9pZCBtcnNhc190 ZWFyZG93bl9pbnRyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaWYgKHNjLT5pbnRy X2hhbmRsZSkKKyAgICAgICAgYnVzX3RlYXJkb3duX2ludHIoc2MtPm1yc2FzX2Rldiwgc2MtPm1y c2FzX2lycSwgc2MtPmludHJfaGFuZGxlKTsKKyAgICBpZiAoc2MtPm1yc2FzX2lycSAhPSBOVUxM KQorICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+bXJzYXNfZGV2LCBTWVNfUkVTX0lS USwgc2MtPmlycV9pZCwgc2MtPm1yc2FzX2lycSk7CisgICAgc2MtPmludHJfaGFuZGxlID0gTlVM TDsKK30KKworLyoqCisgKiBtcnNhc19zdXNwZW5kOiAgICAgICAgICBTdXNwZW5kIGVudHJ5IHBv aW50CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICBEZXZpY2Ugc3RydWN0IHBvaW50ZXIgCisg KiAKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gc3VzcGVu ZCBmcm9tIHRoZSBPUy4gICAKKyAqLworc3RhdGljIGludCBtcnNhc19zdXNwZW5kKGRldmljZV90 IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CisgICAgcmV0dXJuICgwKTsKK30KKworLyoqCisgKiBtcnNhc19yZXN1 bWU6ICAgICAgICAgICBSZXN1bWUgZW50cnkgcG9pbnQgCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICBEZXZpY2Ugc3RydWN0IHBvaW50ZXIgCisgKiAKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhl IGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gcmVzdW1lIGZyb20gdGhlIE9TLiAgIAorICovCitzdGF0 aWMgaW50IG1yc2FzX3Jlc3VtZShkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX3Nv ZnRjICpzYzsKKworICAgIHNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHJldHVybiAo MCk7Cit9CisKKy8qKgorICogbXJzYXNfaW9jdGw6ICAgICAgIElPQ3RsIGNvbW1hbmRzIGVudHJ5 IHBvaW50LiAKKyAqIAorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIElP Q3RscyBmcm9tIHRoZSBPUy4gIEl0IGNhbGxzIHRoZSAKKyAqIGFwcHJvcHJpYXRlIGZ1bmN0aW9u IGZvciBwcm9jZXNzaW5nIGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCByZWNlaXZlZC4KKyAqLwor c3RhdGljIGludAorbXJzYXNfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgY2Fk ZHJfdCBhcmcsIGludCBmbGFnLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNf c29mdGMgKnNjOworICAgIGludCByZXQgPSAwLCBpID0gMDsgCisKKyAgICBzYyA9IChzdHJ1Y3Qg bXJzYXNfc29mdGMgKikoZGV2LT5zaV9kcnYxKTsKKyAgICAKKyAgICBpZiAoc2MtPnJlbW92ZV9p bl9wcm9ncmVzcykgeworICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAg ICAgICAgICAiRHJpdmVyIHJlbW92ZSBvciBzaHV0ZG93biBjYWxsZWQuXG4iKTsKKyAgICAgICAg cmV0dXJuIEVOT0VOVDsKKyAgICB9CisgICAKKyAgICBtdHhfbG9ja19zcGluKCZzYy0+aW9jdGxf bG9jayk7CisgICAgaWYgKCFzYy0+cmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKyAgICAgICAgbXR4X3Vu bG9ja19zcGluKCZzYy0+aW9jdGxfbG9jayk7CisgICAgICAgIGdvdG8gZG9faW9jdGw7CisgICAg fQorCisgICAgLyogUmVsZWFzZSBpb2NsdF9sb2NrLCBhbmQgd2FpdCBmb3IgT0NSCisgICAgICog dG8gYmUgZmluaXNoZWQgKi8KKyAgICBtdHhfdW5sb2NrX3NwaW4oJnNjLT5pb2N0bF9sb2NrKTsK KyAgICB3aGlsZShzYy0+cmVzZXRfaW5fcHJvZ3Jlc3MpeworICAgICAgICBpKys7CisgICAgICAg IGlmICghKGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisgICAgICAgICAgICBt cnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAgICAgICAgICAgICAgIlslMmRdd2FpdGlu ZyBmb3IgIgorICAgICAgICAgICAgICAgICJPQ1IgdG8gYmUgZmluaXNoZWQgJWRcbiIsaSwKKyAg ICAgICAgICAgICAgICAgc2MtPm9jcl90aHJlYWRfYWN0aXZlKTsKKyAgICAgICAgfQorICAgICAg ICBwYXVzZSgibXJfaW9jdGwiLCBoeik7CisgICAgfQorCitkb19pb2N0bDoKKyAgICBzd2l0Y2gg KGNtZCkgeworICAgICAgICBjYXNlIE1SU0FTX0lPQ19GSVJNV0FSRV9QQVNTX1RIUk9VR0g6Cisg ICAgICAgICAgICByZXQgPSBtcnNhc19wYXNzdGhydShzYywgKHZvaWQgKilhcmcpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVJTQVNfSU9DX1NDQU5fQlVTOgorICAgICAgICAg ICAgcmV0ID0gbXJzYXNfYnVzX3NjYW4oc2MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQor IAorICAgIHJldHVybiAocmV0KTsKK30KKworLyoqCisgKiBtcnNhc19zZXR1cF9pcnE6ICAgU2V0 IHVwIGludGVycnVwdC4gCisgKiBpbnB1dDogICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBz b2Z0IHN0YXRlCisgKiAKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBpbnRlcnJ1cHRzIGFzIGEg YnVzIHJlc291cmNlLCB3aXRoIGZsYWdzIGluZGljYXRpbmcKKyAqIHJlc291cmNlIHBlcm1pdHRp bmcgY29udGVtcG9yYW5lb3VzIHNoYXJpbmcgYW5kIGZvciByZXNvdXJjZSB0byBhY3RpdmF0ZSAK KyAqIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfc2V0dXBfaXJxKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MpCit7CisgICAgc2MtPmlycV9pZCA9IDA7CisgICAgc2MtPm1yc2FzX2ly cSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2MtPm1yc2FzX2RldiwgU1lTX1JFU19JUlEsCisg ICAgICAgICAgICAgICAgICAgICAgICAmc2MtPmlycV9pZCwgUkZfU0hBUkVBQkxFIHwgUkZfQUNU SVZFKTsKKyAgICBpZiAoc2MtPm1yc2FzX2lycSA9PSBOVUxMKXsKKyAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGludGVycnVwdFxuIik7CisgICAg ICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorICAgIGlmIChidXNfc2V0dXBfaW50cihzYy0+bXJz YXNfZGV2LCBzYy0+bXJzYXNfaXJxLCBJTlRSX01QU0FGRXxJTlRSX1RZUEVfQ0FNLAorICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBtcnNhc19pc3IsIHNjLCAmc2MtPmludHJfaGFuZGxlKSkg eworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3Qgc2V0IHVwIGlu dGVycnVwdFxuIik7CisgICAgICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorCisgICAgcmV0dXJu ICgwKTsKK30KKworLyoKKyAqIG1yc2FzX2lzcjogICAgICAgIElTUiBlbnRyeSBwb2ludCAKKyAq IGlucHV0OiAgICAgICAgICAgIGFyZ3VtZW50IHBvaW50ZXIgCisgKgorICogVGhpcyBmdW5jdGlv biBpcyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBlbnRyeSBwb2ludC4gIFRoZXJlCisg KiBhcmUgdHdvIHR5cGVzIG9mIGludGVycnVwdHMsIHN0YXRlIGNoYW5nZSBpbnRlcnJ1cHQgYW5k IHJlc3BvbnNlCisgKiBpbnRlcnJ1cHQuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbm90IG91cnMsIHdl IGp1c3QgcmV0dXJuLgorICovCit2b2lkIG1yc2FzX2lzcih2b2lkICphcmcpCit7CisgICAgc3Ry dWN0IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKilhcmc7CisgICAgaW50 IHN0YXR1czsKKworICAgIC8qIENsZWFyIEZXIHN0YXRlIGNoYW5nZSBpbnRlcnJ1cHQgKi8KKyAg ICBzdGF0dXMgPSBtcnNhc19jbGVhcl9pbnRyKHNjKTsKKworICAgIC8qIE5vdCBvdXIgaW50ZXJy dXB0ICovCisgICAgaWYgKCFzdGF0dXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvKiBJ ZiB3ZSBhcmUgcmVzZXR0aW5nLCBiYWlsICovCisgICAgaWYgKHRlc3RfYml0KE1SU0FTX0ZVU0lP Tl9JTl9SRVNFVCwgJnNjLT5yZXNldF9mbGFncykpIHsKKyAgICAgICAgcHJpbnRmKCIgRW50ZXJl ZCBpbnRvIElTUiB3aGVuIE9DUiBpcyBnb2luZyBhY3RpdmUuIFxuIik7CisgICAgICAgIG1yc2Fz X2NsZWFyX2ludHIoc2MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIFByb2Nlc3Mg Zm9yIHJlcGx5IHJlcXVlc3QgYW5kIGNsZWFyIHJlc3BvbnNlIGludGVycnVwdCAqLworICAgIGlm IChtcnNhc19jb21wbGV0ZV9jbWQoc2MpICE9IFNVQ0NFU1MpIAorICAgICAgICBtcnNhc19jbGVh cl9pbnRyKHNjKTsKKworICAgIHJldHVybjsKK30KKworLyoKKyAqIG1yc2FzX2NvbXBsZXRlX2Nt ZDogICAgICAgIFByb2Nlc3MgcmVwbHkgcmVxdWVzdCAgCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBmcm9tIG1yc2FzX2lzcigpIHRvIHByb2Nlc3MgcmVwbHkgcmVxdWVzdCBhbmQg CisgKiBjbGVhciByZXNwb25zZSBpbnRlcnJ1cHQuIFByb2Nlc3Npbmcgb2YgdGhlIHJlcGx5IHJl cXVlc3QgZW50YWlscworICogd2Fsa2luZyB0aHJvdWdoIHRoZSByZXBseSBkZXNjcmlwdG9yIGFy cmF5IGZvciB0aGUgY29tbWFuZCByZXF1ZXN0ICAKKyAqIHBlbmRlZCBmcm9tIEZpcm13YXJlLiAg V2UgbG9vayBhdCB0aGUgRnVuY3Rpb24gZmllbGQgdG8gZGV0ZXJtaW5lCisgKiB0aGUgY29tbWFu ZCB0eXBlIGFuZCBwZXJmb3JtIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uICBCZWZvcmUgd2UKKyAq IHJldHVybiwgd2UgY2xlYXIgdGhlIHJlc3BvbnNlIGludGVycnVwdC4KKyAqLworc3RhdGljIGlu dCBtcnNhc19jb21wbGV0ZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBNcGky UmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QgKmRlc2M7CisgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1Nf UkVQTFlfREVTQ1JJUFRPUiAqcmVwbHlfZGVzYzsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVR VUVTVCAgKnNjc2lfaW9fcmVxOworICAgIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWRfbXB0Owor ICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWRfbWZpOworICAgIHVfaW50OF90IGFybSwgcmVw bHlfZGVzY3JpcHRfdHlwZTsKKyAgICB1X2ludDE2X3Qgc21pZCwgbnVtX2NvbXBsZXRlZDsKKyAg ICB1X2ludDhfdCBzdGF0dXMsIGV4dFN0YXR1czsKKyAgICB1bmlvbiBkZXNjX3ZhbHVlIGRlc2Nf dmFsOworICAgIFBMRF9MT0FEX0JBTEFOQ0VfSU5GTyBsYmluZm87CisgICAgdV9pbnQzMl90IGRl dmljZV9pZDsKKworCisgICAgLyogSWYgd2UgaGF2ZSBhIGhhcmR3YXJlIGVycm9yLCBub3QgbmVl ZCB0byBjb250aW51ZSAqLworICAgIGlmIChzYy0+YWRwcmVjb3ZlcnkgPT0gTVJTQVNfSFdfQ1JJ VElDQUxfRVJST1IpCisgICAgICAgIHJldHVybiAoRE9ORSk7CisKKyAgICBkZXNjID0gc2MtPnJl cGx5X2Rlc2NfbWVtOworICAgIGRlc2MgKz0gc2MtPmxhc3RfcmVwbHlfaWR4OworCisgICAgcmVw bHlfZGVzYyA9IChNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICopZGVzYzsK KworICAgIGRlc2NfdmFsLndvcmQgPSBkZXNjLT5Xb3JkczsKKyAgICBudW1fY29tcGxldGVkID0g MDsKKworICAgIHJlcGx5X2Rlc2NyaXB0X3R5cGUgPSByZXBseV9kZXNjLT5SZXBseUZsYWdzICYg TVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCisgICAgLyogRmluZCBvdXIgcmVw bHkgZGVzY3JpcHRvciBmb3IgdGhlIGNvbW1hbmQgYW5kIHByb2Nlc3MgKi8KKyAgICB3aGlsZSgo ZGVzY192YWwudS5sb3cgIT0gMHhGRkZGRkZGRikgJiYgKGRlc2NfdmFsLnUuaGlnaCAhPSAweEZG RkZGRkZGKSkgCisgICAgeworICAgICAgICBzbWlkID0gcmVwbHlfZGVzYy0+U01JRDsKKyAgICAg ICAgY21kX21wdCA9IHNjLT5tcHRfY21kX2xpc3Rbc21pZCAtMV07CisgICAgICAgIHNjc2lfaW9f cmVxID0gKE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNUICopY21kX21wdC0+aW9fcmVxdWVzdDsK KworICAgICAgICBzdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuc3RhdHVzOworICAg ICAgICBleHRTdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuZXhTdGF0dXM7CisgICAg ICAgCisgICAgICAgIHN3aXRjaCAoc2NzaV9pb19yZXEtPkZ1bmN0aW9uKQorICAgICAgICB7Cisg ICAgICAgICAgICBjYXNlIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIDogIC8qRmFzdCBQ YXRoIElPLiovCisgICAgICAgICAgICAgICAgZGV2aWNlX2lkID0gY21kX21wdC0+Y2NiX3B0ci0+ Y2NiX2gudGFyZ2V0X2lkOworICAgICAgICAgICAgICAgIGxiaW5mbyA9ICZzYy0+bG9hZF9iYWxh bmNlX2luZm9bZGV2aWNlX2lkXTsKKyAgICAgICAgICAgICAgICBpZiAoY21kX21wdC0+bG9hZF9i YWxhbmNlID09IE1SU0FTX0xPQURfQkFMQU5DRV9GTEFHKSB7CisgICAgICAgICAgICAgICAgICAg IGFybSA9IGxiaW5mby0+cmFpZDFEZXZIYW5kbGVbMF0gPT0gc2NzaV9pb19yZXEtPkRldkhhbmRs ZSA/IDAgOiAxOworICAgICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZsYmluZm8tPnNjc2lf cGVuZGluZ19jbWRzW2FybV0pOworICAgICAgICAgICAgICAgICAgICBjbWRfbXB0LT5sb2FkX2Jh bGFuY2UgJj0gfk1SU0FTX0xPQURfQkFMQU5DRV9GTEFHOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAvL0ZhbGwgdGhydSBhbmQgY29tcGxldGUgSU8KKyAgICAgICAgICAgIGNh c2UgTVJTQVNfTVBJMl9GVU5DVElPTl9MRF9JT19SRVFVRVNUOgorICAgICAgICAgICAgICAgIG1y c2FzX21hcF9tcHRfY21kX3N0YXR1cyhjbWRfbXB0LCBzdGF0dXMsIGV4dFN0YXR1cyk7CisgICAg ICAgICAgICAgICAgbXJzYXNfY21kX2RvbmUoc2MsIGNtZF9tcHQpOworICAgICAgICAgICAgICAg IHNjc2lfaW9fcmVxLT5SYWlkQ29udGV4dC5zdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIHNj c2lfaW9fcmVxLT5SYWlkQ29udGV4dC5leFN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgYXRv bWljX2RlYygmc2MtPmZ3X291dHN0YW5kaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgTVJTQVNfTVBJMl9GVU5DVElPTl9QQVNTVEhSVV9JT19SRVFVRVNUOiAv Kk1GSSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgY21kX21maSA9IHNjLT5tZmlfY21kX2xp c3RbY21kX21wdC0+c3luY19jbWRfaWR4XTsKKyAgICAgICAgICAgICAgICBtcnNhc19jb21wbGV0 ZV9tcHRtZmlfcGFzc3RocnUoc2MsIGNtZF9tZmksIHN0YXR1cyk7CisgICAgICAgICAgICAgICAg Y21kX21wdC0+ZmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbXB0X2Nt ZChjbWRfbXB0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg IHNjLT5sYXN0X3JlcGx5X2lkeCsrOworICAgICAgICBpZiAoc2MtPmxhc3RfcmVwbHlfaWR4ID49 IHNjLT5yZXBseV9xX2RlcHRoKSAKKyAgICAgICAgICAgIHNjLT5sYXN0X3JlcGx5X2lkeCA9IDA7 CisKKyAgICAgICAgZGVzYy0+V29yZHMgPSB+KCh1aW50NjRfdCkweDAwKTsgLyogc2V0IGl0IGJh Y2sgdG8gYWxsIDB4RkZGRkZGRkZzICovCisgICAgICAgIG51bV9jb21wbGV0ZWQrKzsKKworICAg ICAgICAvKiBHZXQgdGhlIG5leHQgcmVwbHkgZGVzY3JpcHRvciAqLworICAgICAgICBpZiAoIXNj LT5sYXN0X3JlcGx5X2lkeCkKKyAgICAgICAgICAgIGRlc2MgPSBzYy0+cmVwbHlfZGVzY19tZW07 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc2MrKzsKKworICAgICAgICByZXBseV9kZXNj ID0gKE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgKilkZXNjOworICAgICAg ICBkZXNjX3ZhbC53b3JkID0gZGVzYy0+V29yZHM7CisKKyAgICAgICAgcmVwbHlfZGVzY3JpcHRf dHlwZSA9IHJlcGx5X2Rlc2MtPlJlcGx5RmxhZ3MgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19U WVBFX01BU0s7CisKKyAgICAgICAgaWYocmVwbHlfZGVzY3JpcHRfdHlwZSA9PSBNUEkyX1JQWV9E RVNDUklQVF9GTEFHU19VTlVTRUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAv KiBObyBtYXRjaCwganVzdCByZXR1cm4gKi8KKyAgICBpZiAobnVtX2NvbXBsZXRlZCA9PSAwKQor ICAgICAgICByZXR1cm4gKERPTkUpOworCisgICAgLyogQ2xlYXIgcmVzcG9uc2UgaW50ZXJydXB0 ICovCisgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCByZXBs eV9wb3N0X2hvc3RfaW5kZXgpLHNjLT5sYXN0X3JlcGx5X2lkeCk7IAorCisgICAgcmV0dXJuKDAp OworfQorCisvKgorICogbXJzYXNfbWFwX21wdF9jbWRfc3RhdHVzOiAgQWxsb2NhdGUgRE1BYWJs ZSBtZW1vcnkuCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNl IHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG1yc2FzX2Nv bXBsZXRlX2NtZCgpLCBmb3IgTEQgSU8gYW5kIEZhc3RQYXRoIElPLgorICogSXQgY2hlY2tzIHRo ZSBjb21tYW5kIHN0YXR1cyBhbmQgbWFwcyB0aGUgYXBwcm9wcmlhdGUgQ0FNIHN0YXR1cyBmb3Ig dGhlIENDQi4gICAKKyAqLwordm9pZCBtcnNhc19tYXBfbXB0X2NtZF9zdGF0dXMoc3RydWN0IG1y c2FzX21wdF9jbWQgKmNtZCwgdV9pbnQ4X3Qgc3RhdHVzLCB1X2ludDhfdCBleHRTdGF0dXMpCit7 CisgICAgc3RydWN0IG1yc2FzX3NvZnRjICpzYyA9IGNtZC0+c2M7CisgICAgdV9pbnQ4X3QgKnNl bnNlX2RhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgICAgICBjYXNlIE1GSV9TVEFU X09LOgorICAgICAgICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NN UDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1GSV9TVEFUX1NDU0lfSU9fRkFJ TEVEOgorICAgICAgICBjYXNlIE1GSV9TVEFUX1NDU0lfRE9ORV9XSVRIX0VSUk9SOgorICAgICAg ICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgPSBDQU1fU0NTSV9TVEFUVVNfRVJST1I7 CisgICAgICAgICAgICBzZW5zZV9kYXRhID0gKHVfaW50OF90ICopJmNtZC0+Y2NiX3B0ci0+Y3Np by5zZW5zZV9kYXRhOworICAgICAgICAgICAgaWYgKHNlbnNlX2RhdGEpIHsKKyAgICAgICAgICAg ICAgICAvKiBGb3Igbm93IGp1c3QgY29weSAxOCBieXRlcyBiYWNrICovCisgICAgICAgICAgICAg ICAgbWVtY3B5KHNlbnNlX2RhdGEsIGNtZC0+c2Vuc2UsIDE4KTsKKyAgICAgICAgICAgICAgICBj bWQtPmNjYl9wdHItPmNzaW8uc2Vuc2VfbGVuID0gMTg7CisgICAgICAgICAgICAgICAgY21kLT5j Y2JfcHRyLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0FVVE9TTlNfVkFMSUQ7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNRklfU1RBVF9MRF9PRkZMSU5FOgor ICAgICAgICBjYXNlIE1GSV9TVEFUX0RFVklDRV9OT1RfRk9VTkQ6CisgICAgICAgICAgICBpZiAo Y21kLT5jY2JfcHRyLT5jY2JfaC50YXJnZXRfbHVuKSAKKyAgICAgICAgICAgICAgICBjbWQtPmNj Yl9wdHItPmNjYl9oLnN0YXR1cyB8PSBDQU1fTFVOX0lOVkFMSUQ7CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0RFVl9O T1RfVEhFUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZXIGNtZCBjb21wbGV0ZSBzdGF0dXMg JXhcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICBjbWQtPmNjYl9wdHItPmNjYl9oLnN0YXR1cyA9 IENBTV9SRVFfQ01QX0VSUjsKKyAgICAgICAgICAgIGNtZC0+Y2NiX3B0ci0+Y3Npby5zY3NpX3N0 YXR1cyA9IHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisvKgorICogbXJzYXNfYWxs b2NfbWVtOiAgQWxsb2NhdGUgRE1BYWJsZSBtZW1vcnkuCisgKiBpbnB1dDogICAgICAgICAgICBB ZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMg dGhlIHBhcmVudCBETUEgdGFnIGFuZCBhbGxvY2F0ZXMgRE1BYWJsZSBtZW1vcnkuCisgKiBETUEg dGFnIGRlc2NyaWJlcyBjb25zdHJhaW50cyBvZiBETUEgbWFwcGluZy4gTWVtb3J5IGFsbG9jYXRl ZCBpcyBtYXBwZWQKKyAqIGludG8gS2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gQ2FsbGJhY2sgYXJn dW1lbnQgaXMgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MuIAorICovCitzdGF0aWMgaW50IG1yc2Fz X2FsbG9jX21lbShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIHVfaW50MzJfdCB2ZXJi dWZfc2l6ZSwgaW9fcmVxX3NpemUsIHJlcGx5X2Rlc2Nfc2l6ZSwgc2Vuc2Vfc2l6ZSwKKyAgICAg ICAgICAgICAgY2hhaW5fZnJhbWVfc2l6ZSwgZXZ0X2RldGFpbF9zaXplOworCisgICAgLyoKKyAg ICAgKiBBbGxvY2F0ZSBwYXJlbnQgRE1BIHRhZworICAgICAqLyAKKyAgICBpZiAoYnVzX2RtYV90 YWdfY3JlYXRlKE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAvKiBhbGlnbm1lbnQgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGJvdW5kYXJ5ICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgIC8qIGxvd2Fk ZHIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAg IC8qIGhpZ2hhZGRyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAg ICAgICAgICAgICAvKiBmaWx0ZXIsIGZpbHRlcmFyZyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgTVJTQVNfTUFYX0lPX1NJWkUsLyogbWF4c2l6ZSAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgTVJTQVNfTUFYX1NHTCwgLyogbnNlZ21lbnRzICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBNUlNBU19NQVhfSU9fU0laRSwvKiBtYXhzZWdzaXplICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLyogbG9ja2Z1 bmMsIGxvY2thcmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+bXJzYXNfcGFy ZW50X3RhZyAgIC8qIHRhZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgeworICAg ICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgcGFy ZW50IERNQSB0YWdcbiIpOworICAgICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisKKyAg ICAvKgorICAgICAqIEFsbG9jYXRlIGZvciB2ZXJzaW9uIGJ1ZmZlcgorICAgICAqLyAKKyAgICB2 ZXJidWZfc2l6ZSA9IE1SU0FTX01BWF9OQU1FX0xFTkdUSCooc2l6ZW9mKGJ1c19hZGRyX3QpKTsK KyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBh cmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAg Ly8gYWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFD RV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJV U19TUEFDRV9NQVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmVyYnVmX3NpemUsICAgICAgICAgICAvLyBtYXhzaXplCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2Vn bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJ1Zl9zaXplLCAgICAgICAgICAg Ly8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05P VywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws ICAgICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc2MtPnZlcmJ1Zl90YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgdmVyYnVmIERNQSB0YWdcbiIpOworICAgICAgICAg ICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+ dmVyYnVmX3RhZywgKHZvaWQgKiopJnNjLT52ZXJidWZfbWVtLAorICAgICAgICBCVVNfRE1BX05P V0FJVCwgJnNjLT52ZXJidWZfZG1hbWFwKSkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHZlcmJ1ZiBtZW1vcnlcbiIpOworICAgICAg ICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhzYy0+dmVyYnVmX21lbSwg dmVyYnVmX3NpemUpOworICAgIGlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnZlcmJ1Zl90YWcsIHNj LT52ZXJidWZfZG1hbWFwLCBzYy0+dmVyYnVmX21lbSwKKyAgICAgICAgdmVyYnVmX3NpemUsIG1y c2FzX2FkZHJfY2IsICZzYy0+dmVyYnVmX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKXsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHZlcmJ1 ZiBETUEgbWFwXG4iKTsKKyAgICAgICAgICAgIHJldHVybihFTk9NRU0pOworICAgIH0KKworICAg IC8qCisgICAgICogQWxsb2NhdGUgSU8gUmVxdWVzdCBGcmFtZXMKKyAgICAgKi8gCisgICAgaW9f cmVxX3NpemUgPSBzYy0+aW9fZnJhbWVzX2FsbG9jX3N6OyAKKyAgICBpZiAoYnVzX2RtYV90YWdf Y3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNiwgMCwgICAgICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRh cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwv LyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIs ICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlvX3JlcV9zaXplLCAgICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVudHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb19yZXFfc2l6ZSwgICAgICAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAg Ly8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAg ICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz Yy0+aW9fcmVxdWVzdF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rl diwgIkNhbm5vdCBjcmVhdGUgSU8gcmVxdWVzdCB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVO T01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHNjLT5pb19yZXF1ZXN0X3Rh ZywgKHZvaWQgKiopJnNjLT5pb19yZXF1ZXN0X21lbSwKKyAgICAgICAgICAgICAgICAgICAgQlVT X0RNQV9OT1dBSVQsICZzYy0+aW9fcmVxdWVzdF9kbWFtYXApKSB7CisgICAgICAgIGRldmljZV9w cmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBJTyByZXF1ZXN0IG1lbW9yeVxuIik7 CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisgICAgYnplcm8oc2MtPmlvX3JlcXVl c3RfbWVtLCBpb19yZXFfc2l6ZSk7CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+aW9fcmVx dWVzdF90YWcsIHNjLT5pb19yZXF1ZXN0X2RtYW1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAg IHNjLT5pb19yZXF1ZXN0X21lbSwgaW9fcmVxX3NpemUsIG1yc2FzX2FkZHJfY2IsCisgICAgICAg ICAgICAgICAgICAgICAgICAmc2MtPmlvX3JlcXVlc3RfcGh5c19hZGRyLCBCVVNfRE1BX05PV0FJ VCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGxvYWQg SU8gcmVxdWVzdCBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQor CisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBDaGFpbiBGcmFtZXMKKyAgICAgKi8KKyAgICBjaGFp bl9mcmFtZV9zaXplID0gc2MtPmNoYWluX2ZyYW1lc19hbGxvY19zejsKKyAgICBpZiAoYnVzX2Rt YV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA0LCAwLCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBi b3VuZGFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMy QklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFY QUREUiwgICAgICAvLyBoaWdoYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws IE5VTEwsICAgICAgICAgICAgIC8vIGZpbHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhaW5fZnJhbWVfc2l6ZSwgICAgICAgLy8gbWF4c2l6ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluX2ZyYW1lX3NpemUsICAgICAgIC8vIG1h eHNlZ3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1BX0FMTE9DTk9XLCAg ICAgICAvLyBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAg ICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNjLT5jaGFpbl9mcmFtZV90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1y c2FzX2RldiwgIkNhbm5vdCBjcmVhdGUgY2hhaW4gZnJhbWUgdGFnXG4iKTsKKyAgICAgICAgcmV0 dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+Y2hhaW5f ZnJhbWVfdGFnLCAodm9pZCAqKikmc2MtPmNoYWluX2ZyYW1lX21lbSwKKyAgICAgICAgICAgICAg ICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+Y2hhaW5fZnJhbWVfZG1hbWFwKSkgeworICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2MgY2hhaW4gZnJhbWUg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhz Yy0+Y2hhaW5fZnJhbWVfbWVtLCBjaGFpbl9mcmFtZV9zaXplKTsKKyAgICBpZiAoYnVzX2RtYW1h cF9sb2FkKHNjLT5jaGFpbl9mcmFtZV90YWcsIHNjLT5jaGFpbl9mcmFtZV9kbWFtYXAsCisgICAg ICAgICAgICAgICAgICAgICAgICBzYy0+Y2hhaW5fZnJhbWVfbWVtLCBjaGFpbl9mcmFtZV9zaXpl LCBtcnNhc19hZGRyX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5jaGFpbl9mcmFt ZV9waHlzX2FkZHIsIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJDYW5ub3QgbG9hZCBjaGFpbiBmcmFtZSBtZW1vcnlcbiIpOworICAgICAg ICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBSZXBs eSBEZXNjcmlwdG9yIEFycmF5CisgICAgICovIAorICAgIHJlcGx5X2Rlc2Nfc2l6ZSA9IHNjLT5y ZXBseV9hbGxvY19zejsgCisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3Bh cmVudF90YWcsICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDAs ICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRkcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gZmls dGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseV9kZXNjX3Np emUsICAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAg ICAgICAgICAgICAgICAgICAgLy8gbXNlZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlfZGVzY19zaXplLCAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gbG9ja2Z1bmMsIGxv Y2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPnJlcGx5X2Rlc2NfdGFnKSkg eworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgY3JlYXRlIHJl cGx5IGRlc2NyaXB0b3IgdGFnXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0K KyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+cmVwbHlfZGVzY190YWcsICh2b2lkICoqKSZz Yy0+cmVwbHlfZGVzY19tZW0sCisgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAm c2MtPnJlcGx5X2Rlc2NfZG1hbWFwKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgYWxsb2MgcmVwbHkgZGVzY3JpcHRvciBtZW1vcnlcbiIpOworICAgICAg ICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnJl cGx5X2Rlc2NfdGFnLCBzYy0+cmVwbHlfZGVzY19kbWFtYXAsCisgICAgICAgICAgICAgICAgICAg ICAgICBzYy0+cmVwbHlfZGVzY19tZW0sIHJlcGx5X2Rlc2Nfc2l6ZSwgbXJzYXNfYWRkcl9jYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+cmVwbHlfZGVzY19waHlzX2FkZHIsIEJVU19E TUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgbG9hZCByZXBseSBkZXNjcmlwdG9yIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoRU5P TUVNKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFsbG9jYXRlIFNlbnNlIEJ1ZmZlciBBcnJh eS4gIEtlZXAgaW4gbG93ZXIgNEdCIAorICAgICAqLworICAgIHNlbnNlX3NpemUgPSBzYy0+bWF4 X2Z3X2NtZHMgKiBNUlNBU19TRU5TRV9MRU47CisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShz Yy0+bXJzYXNfcGFyZW50X3RhZywgICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNjQsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRk cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAgIC8v IGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAg ICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZW5zZV9zaXplLCAgICAgICAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgLy8gbnNlZ21lbnRzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2Vuc2Vfc2l6ZSwgICAgICAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8g bG9ja2Z1bmMsIGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPnNlbnNl X3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFs bG9jYXRlIHNlbnNlIGJ1ZiB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAg fQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHNjLT5zZW5zZV90YWcsICh2b2lkICoqKSZzYy0+ c2Vuc2VfbWVtLAorICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+c2Vuc2VfZG1hbWFw KSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2Nh dGUgc2Vuc2UgYnVmIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9 CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+c2Vuc2VfdGFnLCBzYy0+c2Vuc2VfZG1hbWFw LAorICAgICAgICAgICAgc2MtPnNlbnNlX21lbSwgc2Vuc2Vfc2l6ZSwgbXJzYXNfYWRkcl9jYiwg JnNjLT5zZW5zZV9waHlzX2FkZHIsCisgICAgICAgICAgICBCVVNfRE1BX05PV0FJVCkpeworICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgbG9hZCBzZW5zZSBidWYg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKworICAgIC8qCisg ICAgICogQWxsb2NhdGUgZm9yIEV2ZW50IGRldGFpbCBzdHJ1Y3R1cmUKKyAgICAgKi8gCisgICAg ZXZ0X2RldGFpbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBtcnNhc19ldnRfZGV0YWlsKTsgCisgICAg aWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAgLy8g YWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0Vf TUFYQUREUl8zMkJJVCwvLyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVT X1NQQUNFX01BWEFERFIsICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV2dF9kZXRhaWxfc2l6ZSwgICAgICAgIC8vIG1heHNpemUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBt c2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnRfZGV0YWlsX3NpemUsICAg ICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9B TExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzYy0+ZXZ0X2RldGFpbF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBjcmVhdGUgRXZlbnQgZGV0YWlsIHRhZ1xuIik7Cisg ICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Mo c2MtPmV2dF9kZXRhaWxfdGFnLCAodm9pZCAqKikmc2MtPmV2dF9kZXRhaWxfbWVtLAorICAgICAg ICAgICAgICAgICAgICBCVVNfRE1BX05PV0FJVCwgJnNjLT5ldnRfZGV0YWlsX2RtYW1hcCkpIHsK KyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jIEV2ZW50 IGRldGFpbCBidWZmZXIgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAg IH0KKyAgICBiemVybyhzYy0+ZXZ0X2RldGFpbF9tZW0sIGV2dF9kZXRhaWxfc2l6ZSk7CisgICAg aWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+ZXZ0X2RldGFpbF90YWcsIHNjLT5ldnRfZGV0YWlsX2Rt YW1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5ldnRfZGV0YWlsX21lbSwgZXZ0X2Rl dGFpbF9zaXplLCBtcnNhc19hZGRyX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5l dnRfZGV0YWlsX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAgIGRldmljZV9w cmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIEV2ZW50IGRldGFpbCBidWZmZXIgbWVt b3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKworCisgICAvKgorICAg ICogQ3JlYXRlIGEgZG1hIHRhZyBmb3IgZGF0YSBidWZmZXJzOyBzaXplIHdpbGwgYmUgdGhlIG1h eGltdW0KKyAgICAqIHBvc3NpYmxlIEkvTyBzaXplICgyODBrQikuCisgICAgKi8KKyAgICBpZiAo YnVzX2RtYV90YWdfY3JlYXRlKHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBhcmVudCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgLy8gYWxpZ25tZW50IAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLy8gYm91bmRhcnkg CisgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBs b3dhZGRyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIsICAg ICAgLy8gaGlnaGFkZHIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAg ICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZyAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1SU0FTX01BWF9JT19TSVpFLCAgICAgIC8vIG1heHNpemUgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBNUlNBU19NQVhfU0dMLCAgICAgICAgICAvLyBuc2VnbWVudHMgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBNUlNBU19NQVhfSU9fU0laRSwgICAgICAvLyBtYXhzZWdzaXpl IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAgLy8g ZmxhZ3MgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNkbWFfbG9ja19tdXRleCwgICAg ICAvLyBsb2NrZnVuYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+aW9fbG9jaywg ICAgICAgICAgIC8vIGxvY2tmdW5jYXJnIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNj LT5kYXRhX3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fu bm90IGNyZWF0ZSBkYXRhIGRtYSB0YWdcbiIpOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAg ICB9CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBtcnNhc19hZGRyX2NiOiAgIENhbGxi YWNrIGZ1bmN0aW9uIG9mIGJ1c19kbWFtYXBfbG9hZCgpCisgKiBpbnB1dDogICAgICAgICAgIGNh bGxiYWNrIGFyZ3VtZW50LCAKKyAqICAgICAgICAgICAgICAgICAgbWFjaGluZSBkZXBlbmRlbnQg dHlwZSB0aGF0IGRlc2NyaWJlcyBETUEgc2VnbWVudHMsCisgKiAgICAgICAgICAgICAgICAgIG51 bWJlciBvZiBzZWdtZW50cywKKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZS4gIAorICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBtYXBwaW5nIGlu Zm9ybWF0aW9uIHJlc3VsdGFudAorICogb2YgdGhlIGJ1c19kbWFtYXBfbG9hZCgpLiBUaGUgaW5m b3JtYXRpb24gaXMgYWN0dWFsbHkgbm90IGJlaW5nIHVzZWQsCisgKiBidXQgdGhlIGFkZHJlc3Mg aXMgc2F2ZWQgYW55d2F5LgorICovCit2b2lkCittcnNhc19hZGRyX2NiKHZvaWQgKmFyZywgYnVz X2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQoreworICAgIGJ1c19h ZGRyX3QgKmFkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGFkZHIg PSBhcmc7CisgICAgKmFkZHIgPSBzZWdzWzBdLmRzX2FkZHI7Cit9CisKKy8qCisgKiBtcnNhc19z ZXR1cF9yYWlkbWFwOiAgU2V0IHVwIFJBSUQgbWFwLgorICogaW5wdXQ6ICAgICAgICAgICAgICAg IEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIEFsbG9jYXRlIERNQSBtZW1vcnkg Zm9yIHRoZSBSQUlEIG1hcHMgYW5kIHBlcmZvcm0gc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgbXJz YXNfc2V0dXBfcmFpZG1hcChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreyAgICAgICAKKyAgICBz Yy0+bWFwX3N6ID0gc2l6ZW9mKE1SX0ZXX1JBSURfTUFQKSArCisgICAgICAgICAgICAgICAgKHNp emVvZihNUl9MRF9TUEFOX01BUCkgKiAoTUFYX0xPR0lDQUxfRFJJVkVTIC0gMSkpOworCisgICAg Zm9yIChpbnQgaT0wOyBpIDwgMjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJ1c19kbWFfdGFn X2NyZWF0ZShzYy0+bXJzYXNfcGFyZW50X3RhZywgICAgLy8gcGFyZW50CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgNCwgMCwgICAgICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRh cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwv LyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIs ICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNjLT5tYXBfc3osICAgICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBuc2VnbWVudHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzYy0+bWFwX3N6LCAgICAgICAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAg Ly8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAg ICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz Yy0+cmFpZG1hcF90YWdbaV0pKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgYWxsb2NhdGUgcmFpZCBtYXAgdGFnLlxuIik7CisgICAgICAgICAgICBy ZXR1cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Mo c2MtPnJhaWRtYXBfdGFnW2ldLCAodm9pZCAqKikmc2MtPnJhaWRtYXBfbWVtW2ldLAorICAgICAg ICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmc2MtPnJhaWRtYXBfZG1hbWFwW2ldKSkgeworICAg ICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHJh aWRtYXAgbWVtb3J5LlxuIik7CisgICAgICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+cmFpZG1hcF90YWdbaV0sIHNjLT5y YWlkbWFwX2RtYW1hcFtpXSwKKyAgICAgICAgICAgICAgICBzYy0+cmFpZG1hcF9tZW1baV0sIHNj LT5tYXBfc3osIG1yc2FzX2FkZHJfY2IsICZzYy0+cmFpZG1hcF9waHlzX2FkZHJbaV0sCisgICAg ICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQpKXsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHJhaWRtYXAgbWVtb3J5LlxuIik7CisgICAgICAg ICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzYy0+cmFpZG1h cF9tZW1baV0pIHsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNh bm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJhaWQgbWFwLlxuIik7CisgICAgICAgICAgICByZXR1 cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYgKCFtcnNhc19nZXRfbWFw X2luZm8oc2MpKQorICAgICAgICBtcnNhc19zeW5jX21hcF9pbmZvKHNjKTsKKworICAgIHJldHVy biAoMCk7Cit9CisKKy8qKgorICogbXJzYXNfaW5pdF9mdzogICAgICBJbml0aWFsaXplIEZpcm13 YXJlICAgCisgKiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAq IENhbGxzIHRyYW5zaXRpb25fdG9fcmVhZHkoKSB0byBtYWtlIHN1cmUgRmlybXdhcmUgaXMgaW4g b3BlcmF0aW9uYWwgCisgKiBzdGF0ZSBhbmQgY2FsbHMgbXJzYXNfaW5pdF9hZGFwdGVyKCkgdG8g c2VuZCBJT0NfSU5JVCBjb21tYW5kIHRvCisgKiBGaXJtd2FyZS4gIEl0IGlzc3VlcyBpbnRlcm5h bCBjb21tYW5kcyB0byBnZXQgdGhlIGNvbnRyb2xsZXIgaW5mbworICogYWZ0ZXIgdGhlIElPQ19J TklUIGNvbW1hbmQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgYnkgRmlybXdhcmUuICAKKyAqIE5vdGU6 ICBjb2RlIHJlbGF0aW5nIHRvIGdldF9wZGxpc3QsIGdldF9sZF9saXN0IGFuZCBtYXhfc2VjdG9y cyAKKyAqIGFyZSBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIGl0IGlzIGxlZnQgaGVyZSBhcyBw bGFjZWhvbGRlci4gCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfaW5pdF9mdyhzdHJ1Y3QgbXJzYXNf c29mdGMgKnNjKQoreworICAgIHVfaW50MzJfdCBtYXhfc2VjdG9yc18xOworICAgIHVfaW50MzJf dCBtYXhfc2VjdG9yc18yOworICAgIHVfaW50MzJfdCB0bXBfc2VjdG9yczsKKyAgICBzdHJ1Y3Qg bXJzYXNfY3RybF9pbmZvICpjdHJsX2luZm87CisKKyAgICBpbnQgcmV0LCBvY3IgPSAwOworICAg ICAgCisgICAgLyogTWFrZSBzdXJlIEZpcm13YXJlIGlzIHJlYWR5ICovCisgICAgcmV0ID0gbXJz YXNfdHJhbnNpdGlvbl90b19yZWFkeShzYywgb2NyKTsKKyAgICBpZiAocmV0ICE9IFNVQ0NFU1Mp IHsKKyAgICAgICAgcmV0dXJuKHJldCk7CisJfQorCisgICAgLyogR2V0IG9wZXJhdGlvbmFsIHBh cmFtcywgc2dlIGZsYWdzLCBzZW5kIGluaXQgY21kIHRvIGN0bHIgKi8KKyAgICBpZiAobXJzYXNf aW5pdF9hZGFwdGVyKHNjKSAhPSBTVUNDRVNTKXsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiQWRhcHRlciBpbml0aWFsaXplIEZhaWwuXG4iKTsKKyAgICAgICAgcmV0dXJu KDEpOworICAgIH0gCisKKyAgICAvKiBBbGxvY2F0ZSBpbnRlcm5hbCBjb21tYW5kcyBmb3IgcGFz cy10aHJ1ICovCisgICAgaWYgKG1yc2FzX2FsbG9jX21maV9jbWRzKHNjKSAhPSBTVUNDRVNTKXsK KyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQWxsb2NhdGUgTUZJIGNtZCBm YWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0gCisgICAgICAgCisgICAgLyog Rm9yIHBhc3MtdGhydSwgZ2V0IFBEL0xEIGxpc3QgYW5kIGNvbnRyb2xsZXIgaW5mbyAqLworICAg IG1lbXNldChzYy0+cGRfbGlzdCwgMCwgTVJTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBtcnNh c19wZF9saXN0KSk7CisgICAgbXJzYXNfZ2V0X3BkX2xpc3Qoc2MpOworCisgICAgbWVtc2V0KHNj LT5sZF9pZHMsIDB4ZmYsIE1SU0FTX01BWF9MRCk7CisgICAgbXJzYXNfZ2V0X2xkX2xpc3Qoc2Mp OworCisgICAgY3RybF9pbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZv KSwgTV9NUlNBUywgTV9OT1dBSVQpOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBtYXgg YWxsb3dlZCBzZWN0b3JzIHBlciBJTzogVGhlIGNvbnRyb2xsZXIgaW5mbyBoYXMgdHdvCisgICAg ICogbGltaXRzIG9uIG1heCBzZWN0b3JzLiBEcml2ZXIgc2hvdWxkIHVzZSB0aGUgbWluaW11bSBv ZiB0aGVzZSB0d28uCisgICAgICoKKyAgICAgKiAxIDw8IHN0cmlwZV9zel9vcHMubWluID0gbWF4 IHNlY3RvcnMgcGVyIHN0cmlwCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgb2xkZXIgZmlybXdh cmVzICggPCBGVyB2ZXIgMzApIGRpZG4ndCByZXBvcnQgaW5mb3JtYXRpb24KKyAgICAgKiB0byBj YWxjdWxhdGUgbWF4X3NlY3RvcnNfMS4gU28gdGhlIG51bWJlciBlbmRlZCB1cCBhcyB6ZXJvIGFs d2F5cy4KKyAgICAgKi8KKworICAgIHRtcF9zZWN0b3JzID0gMDsKKyAgICBpZiAoY3RybF9pbmZv ICYmICFtcnNhc19nZXRfY3RybF9pbmZvKHNjLCBjdHJsX2luZm8pKSB7CisgICAgICAgIG1heF9z ZWN0b3JzXzEgPSAoMSA8PCBjdHJsX2luZm8tPnN0cmlwZV9zel9vcHMubWluKSAqCisgICAgICAg ICAgICAgICAgICAgIGN0cmxfaW5mby0+bWF4X3N0cmlwc19wZXJfaW87CisgICAgICAgIG1heF9z ZWN0b3JzXzIgPSBjdHJsX2luZm8tPm1heF9yZXF1ZXN0X3NpemU7CisgICAgICAgIHRtcF9zZWN0 b3JzID0gbWluKG1heF9zZWN0b3JzXzEgLCBtYXhfc2VjdG9yc18yKTsKKyAgICAgICAgc2MtPmRp c2FibGVPbmxpbmVDdHJsUmVzZXQgPSAKKyAgICAgICAgICAgIGN0cmxfaW5mby0+cHJvcGVydGll cy5Pbk9mZlByb3BlcnRpZXMuZGlzYWJsZU9ubGluZUN0cmxSZXNldDsKKyAgICB9CisgICAgc2Mt Pm1heF9zZWN0b3JzX3Blcl9yZXEgPSBzYy0+bWF4X251bV9zZ2UgKiBNUlNBU19QQUdFX1NJWkUg LyA1MTI7CisKKyAgICBpZiAodG1wX3NlY3RvcnMgJiYgKHNjLT5tYXhfc2VjdG9yc19wZXJfcmVx ID4gdG1wX3NlY3RvcnMpKQorICAgICAgICBzYy0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IHRtcF9z ZWN0b3JzOworCisgICAgaWYgKGN0cmxfaW5mbykKKyAgICAgICAgZnJlZShjdHJsX2luZm8sIE1f TVJTQVMpOworICAgCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1yc2FzX2luaXRfYWRh cHRlcjogICAgIEluaXRpYWxpemVzIHRoZSBhZGFwdGVyL2NvbnRyb2xsZXIgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBQcmVwYXJlcyBmb3Ig dGhlIGlzc3Vpbmcgb2YgdGhlIElPQyBJbml0IGNtZCB0byBGVyBmb3IgaW5pdGlhbGl6aW5nIHRo ZSAKKyAqIFJPQy9jb250cm9sbGVyLiAgVGhlIEZXIHJlZ2lzdGVyIGlzIHJlYWQgdG8gZGV0ZXJt aW5lZCB0aGUgbnVtYmVyIG9mIAorICogY29tbWFuZHMgdGhhdCBpcyBzdXBwb3J0ZWQuICBBbGwg bWVtb3J5IGFsbG9jYXRpb25zIGZvciBJTyBpcyBiYXNlZCBvbgorICogbWF4X2NtZC4gIEFwcHJv cHJpYXRlIGNhbGN1bGF0aW9ucyBhcmUgcGVyZm9ybWVkIGluIHRoaXMgZnVuY3Rpb24uIAorICov CitpbnQgbXJzYXNfaW5pdF9hZGFwdGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAg dWludDMyX3Qgc3RhdHVzOworICAgIHVfaW50MzJfdCBtYXhfY21kOworICAgIGludCByZXQ7CisK KyAgICAvKiBSZWFkIEZXIHN0YXR1cyByZWdpc3RlciAqLworICAgIHN0YXR1cyA9IG1yc2FzX3Jl YWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9zY3JhdGNoX3BhZCkp OworCisgICAgLyogR2V0IG9wZXJhdGlvbmFsIHBhcmFtcyBmcm9tIHN0YXR1cyByZWdpc3RlciAq LworICAgIHNjLT5tYXhfZndfY21kcyA9IHN0YXR1cyAmIE1SU0FTX0ZXU1RBVEVfTUFYQ01EX01B U0s7CisKKyAgICAvKiBEZWNyZW1lbnQgdGhlIG1heCBzdXBwb3J0ZWQgYnkgMSwgdG8gY29ycmVs YXRlIHdpdGggRlcgKi8KKyAgICBzYy0+bWF4X2Z3X2NtZHMgPSBzYy0+bWF4X2Z3X2NtZHMtMTsK KyAgICBtYXhfY21kID0gc2MtPm1heF9md19jbWRzOworCisgICAgLyogRGV0ZXJtaW5lIGFsbG9j YXRpb24gc2l6ZSBvZiBjb21tYW5kIGZyYW1lcyAqLworICAgIHNjLT5yZXBseV9xX2RlcHRoID0g KChtYXhfY21kICsxICsxNSkvMTYqMTYpOworICAgIHNjLT5yZXF1ZXN0X2FsbG9jX3N6ID0gc2l6 ZW9mKE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTikgKiBtYXhfY21kOworICAgIHNjLT5y ZXBseV9hbGxvY19zeiA9IHNpemVvZihNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OKSAqIChz Yy0+cmVwbHlfcV9kZXB0aCk7CisgICAgc2MtPmlvX2ZyYW1lc19hbGxvY19zeiA9IE1SU0FTX01Q STJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkUgKyAoTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRf SU9fRlJBTUVfU0laRSAqIChtYXhfY21kICsgMSkpOworICAgIHNjLT5jaGFpbl9mcmFtZXNfYWxs b2Nfc3ogPSAxMDI0ICogbWF4X2NtZDsKKyAgICBzYy0+bWF4X3NnZV9pbl9tYWluX21zZyA9IChN UlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFIC0gCisgICAgICAgIG9mZnNldG9m KE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNULCBTR0wpKS8xNjsKKworICAgIHNjLT5tYXhfc2dl X2luX2NoYWluID0gTVJTQVNfTUFYX1NaX0NIQUlOX0ZSQU1FIC8gc2l6ZW9mKE1QSTJfU0dFX0lP X1VOSU9OKTsKKyAgICBzYy0+bWF4X251bV9zZ2UgPSBzYy0+bWF4X3NnZV9pbl9tYWluX21zZyAr IHNjLT5tYXhfc2dlX2luX2NoYWluIC0gMjsKKworICAgIC8qIFVzZWQgZm9yIHBhc3MgdGhydSBN RkkgZnJhbWUgKERDTUQpICovCisgICAgc2MtPmNoYWluX29mZnNldF9tZmlfcHRocnUgPSBvZmZz ZXRvZihNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCwgU0dMKS8xNjsKKworICAgIHNjLT5jaGFp bl9vZmZzZXRfaW9fcmVxdWVzdCA9IChNUlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9T SVpFIC0gCisgICAgICAgIHNpemVvZihNUEkyX1NHRV9JT19VTklPTikpLzE2OworCisgICAgc2Mt Pmxhc3RfcmVwbHlfaWR4ID0gMDsKKworICAgIHJldCA9IG1yc2FzX2FsbG9jX21lbShzYyk7Cisg ICAgaWYgKHJldCAhPSBTVUNDRVNTKQorICAgICAgICByZXR1cm4ocmV0KTsKKworICAgIHJldCA9 IG1yc2FzX2FsbG9jX21wdF9jbWRzKHNjKTsKKyAgICBpZiAocmV0ICE9IFNVQ0NFU1MpCisgICAg ICAgIHJldHVybihyZXQpOworCisgICAgcmV0ID0gbXJzYXNfaW9jX2luaXQoc2MpOworICAgIGlm IChyZXQgIT0gU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuKHJldCk7CisgICAgCisgICAgcmV0dXJu KDApOworfQorCisvKioKKyAqIG1yc2FzX2FsbG9jX2lvY19jbWQ6ICAgQWxsb2NhdGVzIG1lbW9y eSBmb3IgSU9DIEluaXQgY29tbWFuZCAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogQWxsb2NhdGVzIGZvciB0aGUgSU9DIEluaXQgY21kIHRvIEZX IHRvIGluaXRpYWxpemUgdGhlIFJPQy9jb250cm9sbGVyLgorICovCitpbnQgbXJzYXNfYWxsb2Nf aW9jX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpb2NfaW5pdF9zaXpl OworCisgICAgLyogQWxsb2NhdGUgSU9DIElOSVQgY29tbWFuZCAqLworICAgIGlvY19pbml0X3Np emUgPSAxMDI0ICsgc2l6ZW9mKE1QSTJfSU9DX0lOSVRfUkVRVUVTVCk7IAorICAgIGlmIChidXNf ZG1hX3RhZ19jcmVhdGUoIHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBhcmVudAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQs IGJvdW5kYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJf MzJCSVQsLy8gbG93YWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9N QVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgTlVMTCwgICAgICAgICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpb2NfaW5pdF9zaXplLCAgICAgICAgICAvLyBtYXhzaXplCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgLy8gbXNlZ21lbnRz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2luaXRfc2l6ZSwgICAgICAgICAgLy8g bWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1cs ICAgICAgIC8vIGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwg ICAgICAgICAgICAgLy8gbG9ja2Z1bmMsIGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc2MtPmlvY19pbml0X3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJz YXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGlvYyBpbml0IHRhZ1xuIik7CisgICAgICAgIHJldHVy biAoRU5PTUVNKTsKKyAgICB9CisgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Moc2MtPmlvY19pbml0 X3RhZywgKHZvaWQgKiopJnNjLT5pb2NfaW5pdF9tZW0sCisgICAgICAgICAgICBCVVNfRE1BX05P V0FJVCwgJnNjLT5pb2NfaW5pdF9kbWFtYXApKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBpb2MgaW5pdCBjbWQgbWVtXG4iKTsKKyAgICAg ICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhzYy0+aW9jX2luaXRfbWVtLCBp b2NfaW5pdF9zaXplKTsKKyAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT5pb2NfaW5pdF90YWcs IHNjLT5pb2NfaW5pdF9kbWFtYXAsIAorICAgICAgICAgICAgc2MtPmlvY19pbml0X21lbSwgaW9j X2luaXRfc2l6ZSwgbXJzYXNfYWRkcl9jYiwKKyAgICAgICAgICAgICZzYy0+aW9jX2luaXRfcGh5 c19tZW0sIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgbG9hZCBpb2MgaW5pdCBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJu IChFTk9NRU0pOworICAgIH0KKworICAgIHJldHVybiAoMCk7Cit9CisKKy8qKgorICogbXJzYXNf ZnJlZV9pb2NfY21kOiAgIEFsbG9jYXRlcyBtZW1vcnkgZm9yIElPQyBJbml0IGNvbW1hbmQgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogRGVhbGxv Y2F0ZXMgbWVtb3J5IG9mIHRoZSBJT0MgSW5pdCBjbWQuCisgKi8KK3ZvaWQgbXJzYXNfZnJlZV9p b2NfY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaWYgKHNjLT5pb2NfaW5pdF9w aHlzX21lbSkKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmlvY19pbml0X3RhZywgc2Mt PmlvY19pbml0X2RtYW1hcCk7CisgICAgaWYgKHNjLT5pb2NfaW5pdF9tZW0gIT0gTlVMTCkKKyAg ICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5pb2NfaW5pdF90YWcsIHNjLT5pb2NfaW5pdF9tZW0s IHNjLT5pb2NfaW5pdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9jX2luaXRfdGFnICE9IE5VTEwp CisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmlvY19pbml0X3RhZyk7Cit9CisKKy8q KgorICogbXJzYXNfaW9jX2luaXQ6ICAgICBTZW5kcyBJT0MgSW5pdCBjb21tYW5kIHRvIEZXCisg KiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyB0 aGUgSU9DIEluaXQgY21kIHRvIEZXIHRvIGluaXRpYWxpemUgdGhlIFJPQy9jb250cm9sbGVyLgor ICovCitpbnQgbXJzYXNfaW9jX2luaXQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBz dHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSAqaW5pdF9mcmFtZTsKKyAgICBwTXBpMklPQ0luaXRSZXF1 ZXN0X3QgICBJT0NJbml0TXNnOworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiBy ZXFfZGVzYzsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9IE1SU0FTX0lPQ19JTklUX1dBSVRfVElN RTsKKyAgICBidXNfYWRkcl90IHBoeXNfYWRkcjsKKyAgICBpbnQgaSwgcmV0Y29kZSA9IDA7CisK KyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBJT0MgSU5JVCBjb21tYW5kICovCisgICAg aWYgKG1yc2FzX2FsbG9jX2lvY19jbWQoc2MpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBJT0MgY29tbWFuZC5cbiIpOyAKKyAgICAgICAg cmV0dXJuKDEpOworICAgIH0KKworICAgIElPQ0luaXRNc2cgPSAocE1waTJJT0NJbml0UmVxdWVz dF90KSgoKGNoYXIgKilzYy0+aW9jX2luaXRfbWVtKSArMTAyNCk7CisgICAgSU9DSW5pdE1zZy0+ RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOworICAgIElPQ0luaXRNc2ctPldob0lu aXQgPSBNUEkyX1dIT0lOSVRfSE9TVF9EUklWRVI7CisgICAgSU9DSW5pdE1zZy0+TXNnVmVyc2lv biA9IE1QSTJfVkVSU0lPTjsKKyAgICBJT0NJbml0TXNnLT5IZWFkZXJWZXJzaW9uID0gTVBJMl9I RUFERVJfVkVSU0lPTjsKKyAgICBJT0NJbml0TXNnLT5TeXN0ZW1SZXF1ZXN0RnJhbWVTaXplID0g TVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAvIDQ7CisgICAgSU9DSW5pdE1z Zy0+UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggPSBzYy0+cmVwbHlfcV9kZXB0aDsKKyAg ICBJT0NJbml0TXNnLT5SZXBseURlc2NyaXB0b3JQb3N0UXVldWVBZGRyZXNzID0gc2MtPnJlcGx5 X2Rlc2NfcGh5c19hZGRyOworICAgIElPQ0luaXRNc2ctPlN5c3RlbVJlcXVlc3RGcmFtZUJhc2VB ZGRyZXNzID0gc2MtPmlvX3JlcXVlc3RfcGh5c19hZGRyOworCisgICAgaW5pdF9mcmFtZSA9IChz dHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSAqKXNjLT5pb2NfaW5pdF9tZW07CisgICAgaW5pdF9mcmFt ZS0+Y21kID0gTUZJX0NNRF9JTklUOworICAgIGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPSAweEZG OworICAgIGluaXRfZnJhbWUtPmZsYWdzIHw9IE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlf UVVFVUU7CisKKyAgICBpZiAoc2MtPnZlcmJ1Zl9tZW0pIHsKKyAgICAgICAgc25wcmludGYoKGNo YXIgKilzYy0+dmVyYnVmX21lbSwgc3RybGVuKE1SU0FTX1ZFUlNJT04pKzIsIiVzXG4iLAorICAg ICAgICAgICAgICAgIE1SU0FTX1ZFUlNJT04pOworICAgICAgICBpbml0X2ZyYW1lLT5kcml2ZXJf dmVyX2xvID0gKGJ1c19hZGRyX3Qpc2MtPnZlcmJ1Zl9waHlzX2FkZHI7CisgICAgICAgIGluaXRf ZnJhbWUtPmRyaXZlcl92ZXJfaGkgPSAwOworICAgIH0KKworICAgIHBoeXNfYWRkciA9IChidXNf YWRkcl90KXNjLT5pb2NfaW5pdF9waHlzX21lbSArIDEwMjQ7CisgICAgaW5pdF9mcmFtZS0+cXVl dWVfaW5mb19uZXdfcGh5c19hZGRyX2xvID0gcGh5c19hZGRyOworICAgIGluaXRfZnJhbWUtPmRh dGFfeGZlcl9sZW4gPSBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpOworCisgICAgcmVxX2Rl c2MuYWRkci5Xb3JkcyA9IChidXNfYWRkcl90KXNjLT5pb2NfaW5pdF9waHlzX21lbTsKKyAgICBy ZXFfZGVzYy5NRkFJby5SZXF1ZXN0RmxhZ3MgPSAKKyAgICAgICAgKE1SU0FTX1JFUV9ERVNDUklQ VF9GTEFHU19NRkEgPDwgTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworCisg ICAgbXJzYXNfZGlzYWJsZV9pbnRyKHNjKTsKKyAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09D UiwgIklzc3VpbmcgSU9DIElOSVQgY29tbWFuZCB0byBGVy5cbiIpOworICAgIC8vZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiSXNzdWluZyBJT0MgSU5JVCBjb21tYW5kIHRvIEZXLlxuIik7 ZGVsPworICAgIG1yc2FzX2ZpcmVfY21kKHNjLCByZXFfZGVzYy5hZGRyLnUubG93LCByZXFfZGVz Yy5hZGRyLnUuaGlnaCk7CisKKyAgICAvKgorICAgICAqIFBvbGwgcmVzcG9uc2UgdGltZXIgdG8g d2FpdCBmb3IgRmlybXdhcmUgcmVzcG9uc2UuICBXaGlsZSB0aGlzCisgICAgICogdGltZXIgd2l0 aCB0aGUgREVMQVkgY2FsbCBjb3VsZCBibG9jayBDUFUsIHRoZSB0aW1lIGludGVydmFsIGZvcgor ICAgICAqIHRoaXMgaXMgb25seSAxIG1pbGxpc2Vjb25kLgorICAgICAqLworICAgIGlmIChpbml0 X2ZyYW1lLT5jbWRfc3RhdHVzID09IDB4RkYpIHsKKyAgICAgICAgZm9yIChpPTA7IGkgPCAobWF4 X3dhaXQgKiAxMDAwKTsgaSsrKXsKKyAgICAgICAgICAgIGlmIChpbml0X2ZyYW1lLT5jbWRfc3Rh dHVzID09IDB4RkYpCisgICAgICAgICAgICAgICAgREVMQVkoMTAwMCk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgICAgfQorCisgICAgaWYg KGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPT0gMCkKKyAgICAgICAgIG1yc2FzX2RwcmludChzYywg TVJTQVNfT0NSLAorICAgICAgICAgICAgICAgIklPQyBJTklUIHJlc3BvbnNlIHJlY2VpdmVkIGZy b20gRlcuXG4iKTsKKyAgICAgICAgIC8vZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9D IElOSVQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBGVy5cbiIpO2RlbD8KKyAgICBlbHNlIAorICAg IHsKKyAgICAgICAgaWYgKGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPT0gMHhGRikgCisgICAgICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJJT0MgSW5pdCB0aW1lZCBvdXQgYWZ0 ZXIgJWQgc2Vjb25kcy5cbiIsIG1heF93YWl0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DIEluaXQgZmFpbGVkLCBzdGF0dXMgPSAw eCV4XG4iLCBpbml0X2ZyYW1lLT5jbWRfc3RhdHVzKTsKKyAgICAgICAgcmV0Y29kZSA9IDE7Cisg ICAgfQorCisgICAgbXJzYXNfZnJlZV9pb2NfY21kKHNjKTsKKyAgICByZXR1cm4gKHJldGNvZGUp OworfQorCisvKioKKyAqIG1yc2FzX2FsbG9jX21wdF9jbWRzOiAgQWxsb2NhdGVzIHRoZSBjb21t YW5kIHBhY2tldHMKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBz b2Z0IHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGludGVybmFsIGNv bW1hbmRzIGZvciBJT3MuIEVhY2ggY29tbWFuZCB0aGF0IGlzCisgKiBpc3N1ZWQgdG8gRlcgaXMg d3JhcHBlZCBpbiBhIGxvY2FsIGRhdGEgc3RydWN0dXJlIGNhbGxlZCBtcnNhc19tcHRfY21kLgor ICogQW4gYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggbXJzYXNfbXB0X2NtZCBjb250ZXh0LiAgVGhl IGZyZWUgY29tbWFuZHMgYXJlIAorICogbWFpbnRhaW5lZCBpbiBhIGxpbmtlZCBsaXN0IChjbWQg cG9vbCkuIFNNSUQgdmFsdWUgcmFuZ2UgaXMgZnJvbSAxIHRvCisgKiBtYXhfZndfY21kcy4KKyAq LworaW50IG1yc2FzX2FsbG9jX21wdF9jbWRzKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7Cisg ICAgaW50IGksIGo7CisgICAgdV9pbnQzMl90IG1heF9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21w dF9jbWQgKmNtZDsKKyAgICBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90IHJlcGx5X2Rlc2M7 CisgICAgdV9pbnQzMl90IG9mZnNldCwgY2hhaW5fb2Zmc2V0LCBzZW5zZV9vZmZzZXQ7CisgICAg YnVzX2FkZHJfdCBpb19yZXFfYmFzZV9waHlzLCBjaGFpbl9mcmFtZV9iYXNlX3BoeXMsIHNlbnNl X2Jhc2VfcGh5czsKKyAgICB1X2ludDhfdCAqaW9fcmVxX2Jhc2UsICpjaGFpbl9mcmFtZV9iYXNl LCAqc2Vuc2VfYmFzZTsKKworICAgIG1heF9jbWQgPSBzYy0+bWF4X2Z3X2NtZHM7CisKKyAgICBz Yy0+cmVxX2Rlc2MgPSBtYWxsb2Moc2MtPnJlcXVlc3RfYWxsb2Nfc3osIE1fTVJTQVMsIE1fTk9X QUlUKTsKKyAgICBpZiAoIXNjLT5yZXFfZGVzYykgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJPdXQgb2YgbWVtb3J5LCBjYW5ub3QgYWxsb2MgcmVxIGRlc2NcbiIpOwor ICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisgICAgbWVtc2V0KHNjLT5yZXFfZGVzYywg MCwgc2MtPnJlcXVlc3RfYWxsb2Nfc3opOworCisgICAgLyoKKyAgICAgKiBzYy0+bXB0X2NtZF9s aXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtcnNhc19tcHRfY21kIHBvaW50ZXJzLiBBbGxvY2F0 ZSB0aGUKKyAgICAgKiBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGluZGl2 aWR1YWwgY29tbWFuZHMuCisgICAgICovCisgICAgc2MtPm1wdF9jbWRfbGlzdCA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IG1yc2FzX21wdF9jbWQqKSptYXhfY21kLCBNX01SU0FTLCBNX05PV0FJVCk7 CisgICAgaWYgKCFzYy0+bXB0X2NtZF9saXN0KSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIG1wdF9jbWRfbGlzdC5cbiIpOwor ICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisgICAgbWVtc2V0KHNjLT5tcHRfY21kX2xp c3QsIDAsIHNpemVvZihzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqKSptYXhfY21kKTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisgICAgICAgIHNjLT5tcHRfY21kX2xpc3RbaV0g PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcnNhc19tcHRfY21kKSwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNX01SU0FTLCBNX05PV0FJVCk7CisgICAgICAgIGlmICghc2MtPm1w dF9jbWRfbGlzdFtpXSkgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKyAg ICAgICAgICAgICAgICBmcmVlKHNjLT5tcHRfY21kX2xpc3Rbal0sTV9NUlNBUyk7CisgICAgICAg ICAgICBmcmVlKHNjLT5tcHRfY21kX2xpc3QsIE1fTVJTQVMpOworICAgICAgICAgICAgc2MtPm1w dF9jbWRfbGlzdCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIGlvX3JlcV9iYXNlID0gKHVfaW50OF90KilzYy0+aW9fcmVxdWVzdF9t ZW0gKyBNUlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFOworICAgIGlvX3JlcV9i YXNlX3BoeXMgPSAoYnVzX2FkZHJfdClzYy0+aW9fcmVxdWVzdF9waHlzX2FkZHIgKyBNUlNBU19N UEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFOyAKKyAgICBjaGFpbl9mcmFtZV9iYXNlID0g KHVfaW50OF90KilzYy0+Y2hhaW5fZnJhbWVfbWVtOworICAgIGNoYWluX2ZyYW1lX2Jhc2VfcGh5 cyA9IChidXNfYWRkcl90KXNjLT5jaGFpbl9mcmFtZV9waHlzX2FkZHI7CisgICAgc2Vuc2VfYmFz ZSA9ICh1X2ludDhfdCopc2MtPnNlbnNlX21lbTsKKyAgICBzZW5zZV9iYXNlX3BoeXMgPSAoYnVz X2FkZHJfdClzYy0+c2Vuc2VfcGh5c19hZGRyOworICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfY21k OyBpKyspIHsKKyAgICAgICAgY21kID0gc2MtPm1wdF9jbWRfbGlzdFtpXTsKKyAgICAgICAgb2Zm c2V0ID0gTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAqIGk7CisJY2hhaW5f b2Zmc2V0ID0gMTAyNCAqIGk7CisgICAgICAgIHNlbnNlX29mZnNldCA9IE1SU0FTX1NFTlNFX0xF TiAqIGk7CisgICAgICAgIG1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbXJzYXNfbXB0X2Nt ZCkpOworICAgICAgICBjbWQtPmluZGV4ID0gaSArIDE7CisgICAgICAgIGNtZC0+Y2NiX3B0ciA9 IE5VTEw7CisgICAgICAgIGNhbGxvdXRfaW5pdCgmY21kLT5jbV9jYWxsb3V0LCAwKTsKKyAgICAg ICAgY21kLT5zeW5jX2NtZF9pZHggPSAodV9pbnQzMl90KU1SU0FTX1VMT05HX01BWDsKKyAgICAg ICAgY21kLT5zYyA9IHNjOyAKKyAgICAgICAgY21kLT5pb19yZXF1ZXN0ID0gKE1SU0FTX1JBSURf U0NTSV9JT19SRVFVRVNUICopIChpb19yZXFfYmFzZSArIG9mZnNldCk7CisgICAgICAgIG1lbXNl dChjbWQtPmlvX3JlcXVlc3QsIDAsIHNpemVvZihNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCkp OworICAgICAgICBjbWQtPmlvX3JlcXVlc3RfcGh5c19hZGRyID0gaW9fcmVxX2Jhc2VfcGh5cyAr IG9mZnNldDsKKwljbWQtPmNoYWluX2ZyYW1lID0gKE1QSTJfU0dFX0lPX1VOSU9OICopIChjaGFp bl9mcmFtZV9iYXNlICsgY2hhaW5fb2Zmc2V0KTsKKwljbWQtPmNoYWluX2ZyYW1lX3BoeXNfYWRk ciA9IGNoYWluX2ZyYW1lX2Jhc2VfcGh5cyArIGNoYWluX29mZnNldDsKKyAgICAgICAgY21kLT5z ZW5zZSA9IHNlbnNlX2Jhc2UgKyBzZW5zZV9vZmZzZXQ7CisgICAgICAgIGNtZC0+c2Vuc2VfcGh5 c19hZGRyID0gc2Vuc2VfYmFzZV9waHlzICsgc2Vuc2Vfb2Zmc2V0OworICAgICAgICBpZiAoYnVz X2RtYW1hcF9jcmVhdGUoc2MtPmRhdGFfdGFnLCAwLCAmY21kLT5kYXRhX2RtYW1hcCkpIHsKKyAg ICAgICAgICAgIHJldHVybihGQUlMKTsKKyAgICAgICAgfQorICAgICAgICBUQUlMUV9JTlNFUlRf VEFJTCgmKHNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCksIGNtZCwgbmV4dCk7CisgICAgfQor ICAgIAorICAgIC8qIEluaXRpYWxpemUgcmVwbHkgZGVzY3JpcHRvciBhcnJheSB0byAweEZGRkZG RkZGICovCisgICAgcmVwbHlfZGVzYyA9IHNjLT5yZXBseV9kZXNjX21lbTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgc2MtPnJlcGx5X3FfZGVwdGg7IGkrKywgcmVwbHlfZGVzYysrKSB7CisgICAgICAg IHJlcGx5X2Rlc2MtPldvcmRzID0gTVJTQVNfVUxPTkdfTUFYOworICAgIH0KKyAgICByZXR1cm4o MCk7Cit9CisKKy8qKgorICogbXJzYXNfZmlyZV9jbWQ6ICAgICBTZW5kcyBjb21tYW5kIHRvIEZX CisgKiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAgICAgICAg ICAgICAgICAgICByZXF1ZXN0IGRlc2NyaXB0b3IgYWRkcmVzcyBsb3cKKyAqICAgICAgICAgICAg ICAgICAgICAgcmVxdWVzdCBkZXNjcmlwdG9yIGFkZHJlc3MgaGlnaAorICoKKyAqIFRoaXMgZnVu Y3Rpb25zIGZpcmVzIHRoZSBjb21tYW5kIHRvIEZpcm13YXJlIGJ5IHdyaXRpbmcgdG8gdGhlIAor ICogaW5ib3VuZF9sb3dfcXVldWVfcG9ydCBhbmQgaW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQuCisg Ki8KK3ZvaWQgbXJzYXNfZmlyZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdV9pbnQzMl90 IHJlcV9kZXNjX2xvLCAKKyAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcmVxX2Rlc2NfaGkp Cit7IAorICAgIG10eF9sb2NrKCZzYy0+cGNpX2xvY2spOworICAgIG1yc2FzX3dyaXRlX3JlZyhz Yywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgaW5ib3VuZF9sb3dfcXVldWVfcG9ydCksIAorICAg ICAgICAgICAgICAgICAgICByZXFfZGVzY19sbyk7IAorICAgIG1yc2FzX3dyaXRlX3JlZyhzYywg b2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgaW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQpLCAKKyAgICAg ICAgICAgICAgICAgICAgcmVxX2Rlc2NfaGkpOyAKKyAgICBtdHhfdW5sb2NrKCZzYy0+cGNpX2xv Y2spOworfQorCisvKioKKyAqIG1yc2FzX3RyYW5zaXRpb25fdG9fcmVhZHk6ICBNb3ZlIEZXIHRv IFJlYWR5IHN0YXRlIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgaW5z dGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIEZXIHBh c3NlcyBjYW4gcG90ZW50aWFsbHkgYmUgaW4gYW55IG9uZSBvZgorICogc2V2ZXJhbCBwb3NzaWJs ZSBzdGF0ZXMuIElmIHRoZSBGVyBpbiBvcGVyYXRpb25hbCwgd2FpdGluZy1mb3ItaGFuZHNoYWtl CisgKiBzdGF0ZXMsIGRyaXZlciBtdXN0IHRha2Ugc3RlcHMgdG8gYnJpbmcgaXQgdG8gcmVhZHkg c3RhdGUuIE90aGVyd2lzZSwgaXQKKyAqIGhhcyB0byB3YWl0IGZvciB0aGUgcmVhZHkgc3RhdGUu CisgKi8KK2ludCBtcnNhc190cmFuc2l0aW9uX3RvX3JlYWR5KHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIGludCBvY3IpCit7CisgICAgaW50IGk7CisgICAgdV9pbnQ4X3QgbWF4X3dhaXQ7CisgICAg dV9pbnQzMl90IHZhbCwgZndfc3RhdGU7CisgICAgdV9pbnQzMl90IGN1cl9zdGF0ZTsKKyAgICB1 X2ludDMyX3QgYWJzX3N0YXRlLCBjdXJyX2Fic19zdGF0ZTsKKworICAgIHZhbCA9IG1yc2FzX3Jl YWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9zY3JhdGNoX3BhZCkp OworICAgIGZ3X3N0YXRlID0gdmFsICYgTUZJX1NUQVRFX01BU0s7CisgICAgbWF4X3dhaXQgPSBN UlNBU19SRVNFVF9XQUlUX1RJTUU7CisKKyAgICBpZiAoZndfc3RhdGUgIT0gTUZJX1NUQVRFX1JF QURZKQorICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJXYWl0aW5nIGZvciBG VyB0byBjb21lIHRvIHJlYWR5IHN0YXRlXG4iKTsKKworICAgIHdoaWxlIChmd19zdGF0ZSAhPSBN RklfU1RBVEVfUkVBRFkpIHsKKwlhYnNfc3RhdGUgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0 b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKwlzd2l0Y2ggKGZ3X3N0 YXRlKSB7CisJICAgIGNhc2UgTUZJX1NUQVRFX0ZBVUxUOgorCQlkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsICJGVyBpcyBpbiBGQVVMVCBzdGF0ZSEhXG4iKTsKKwkJaWYgKG9jcikgeworCQkg ICAgY3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZBVUxUOworCSAgCSAgICBicmVhazsKKwkJfSAKKyAg ICAgICAgZWxzZQorCQkJcmV0dXJuIC1FTk9ERVY7CisJICAgIGNhc2UgTUZJX1NUQVRFX1dBSVRf SEFORFNIQUtFOgorCQkvKiBTZXQgdGhlIENMUiBiaXQgaW4gaW5ib3VuZCBkb29yYmVsbCAqLwor ICAgICAgICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3Nl dCwgZG9vcmJlbGwpLAorCQkgICAgICAgIE1GSV9JTklUX0NMRUFSX0hBTkRTSEFLRXxNRklfSU5J VF9IT1RQTFVHKTsKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFOworCQli cmVhazsKKwkgICAgY2FzZSBNRklfU1RBVEVfQk9PVF9NRVNTQUdFX1BFTkRJTkc6CisgICAgICAg ICAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBkb29y YmVsbCksCisJCSAgICAgICAgTUZJX0lOSVRfSE9UUExVRyk7CisJCWN1cl9zdGF0ZSA9IE1GSV9T VEFURV9CT09UX01FU1NBR0VfUEVORElORzsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUZJX1NUQVRF X09QRVJBVElPTkFMOgorCQkvKiBCcmluZyBpdCB0byBSRUFEWSBzdGF0ZTsgYXNzdW1pbmcgbWF4 IHdhaXQgMTAgc2VjcyAqLworCQltcnNhc19kaXNhYmxlX2ludHIoc2MpOworICAgICAgICAgICAg ICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgZG9vcmJlbGwp LCBNRklfUkVTRVRfRkxBR1MpOworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbWF4X3dh aXQgKiAxMDAwOyBpKyspIHsKKwkgICAgICAgICAgICBpZiAobXJzYXNfcmVhZF9yZWcoc2MsIG9m ZnNldG9mKG1yc2FzX3JlZ19zZXQsIGRvb3JiZWxsKSkgJiAxKQorICAgICAgICAgICAgICAgICAg ICAgICAgREVMQVkoMTAwMCk7CisJCSAgICBlbHNlCisJCSAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgfQorCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfT1BFUkFUSU9OQUw7CisJICAgICAg ICBicmVhazsKKwkgICAgY2FzZSBNRklfU1RBVEVfVU5ERUZJTkVEOgorCSAgICAgICAgLyogVGhp cyBzdGF0ZSBzaG91bGQgbm90IGxhc3QgZm9yIG1vcmUgdGhhbiAyIHNlY29uZHMgKi8KKwkgICAg ICAgIGN1cl9zdGF0ZSA9IE1GSV9TVEFURV9VTkRFRklORUQ7CisJICAgICAgICBicmVhazsKKwkg ICAgY2FzZSBNRklfU1RBVEVfQkJfSU5JVDoKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0JCX0lO SVQ7CisJCWJyZWFrOworCSAgICBjYXNlIE1GSV9TVEFURV9GV19JTklUOgorCQljdXJfc3RhdGUg PSBNRklfU1RBVEVfRldfSU5JVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUZJX1NUQVRFX0ZXX0lO SVRfMjoKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZXX0lOSVRfMjsKKwkJYnJlYWs7CisJICAg IGNhc2UgTUZJX1NUQVRFX0RFVklDRV9TQ0FOOgorCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfREVW SUNFX1NDQU47CisJCWJyZWFrOworCSAgICBjYXNlIE1GSV9TVEFURV9GTFVTSF9DQUNIRToKKwkJ Y3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFOworCQlicmVhazsKKwkgICAgZGVmYXVs dDoKKwkJZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiVW5rbm93biBzdGF0ZSAweCV4XG4i LCBmd19zdGF0ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogVGhlIGN1cl9z dGF0ZSBzaG91bGQgbm90IGxhc3QgZm9yIG1vcmUgdGhhbiBtYXhfd2FpdCBzZWNzCisJICovCisJ Zm9yIChpID0gMDsgaSA8IChtYXhfd2FpdCAqIDEwMDApOyBpKyspIHsKKyAgICAgICAgICAgIGZ3 X3N0YXRlID0gKG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCAKKyAg ICAgICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKSYgTUZJX1NUQVRFX01BU0sp OworCSAgICBjdXJyX2Fic19zdGF0ZSA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNh c19yZWdfc2V0LAorICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpOwor ICAgICAgICAgICAgaWYgKGFic19zdGF0ZSA9PSBjdXJyX2Fic19zdGF0ZSkKKyAgICAgICAgICAg ICAgICBERUxBWSgxMDAwKTsKKwkgICAgZWxzZQorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFJl dHVybiBlcnJvciBpZiBmd19zdGF0ZSBoYXNuJ3QgY2hhbmdlZCBhZnRlciBtYXhfd2FpdAorCSAq LworCWlmIChjdXJyX2Fic19zdGF0ZSA9PSBhYnNfc3RhdGUpIHsKKyAgICAgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZXIHN0YXRlIFslZF0gaGFzbid0IGNoYW5nZWQgIgor CQkgICAgICAgImluICVkIHNlY3NcbiIsIGZ3X3N0YXRlLCBtYXhfd2FpdCk7CisJICAgIHJldHVy biAtRU5PREVWOworCX0KKyAgICB9CisgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsICJG VyBub3cgaW4gUmVhZHkgc3RhdGVcbiIpOworICAgIC8vZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNf ZGV2LCAiRlcgbm93IGluIFJlYWR5IHN0YXRlXG4iKTtkZWw/CisgICAgcmV0dXJuIDA7Cit9CisK Ky8qKgorICogbXJzYXNfZ2V0X21maV9jbWQ6ICAgICAgR2V0IGEgY21kIGZyb20gZnJlZSBjb21t YW5kIHBvb2wKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQor ICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbiBNRkkgY29tbWFuZCBmcm9tIHRoZSBjb21t YW5kIGxpc3QuCisgKi8KK3N0cnVjdCBtcnNhc19tZmlfY21kKiBtcnNhc19nZXRfbWZpX2NtZChz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQg PSBOVUxMOworICAgICAgICAKKyAgICBtdHhfbG9jaygmc2MtPm1maV9jbWRfcG9vbF9sb2NrKTsK KyAgICBpZiAoIVRBSUxRX0VNUFRZKCZzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpKXsKKyAg ICAgICAgY21kID0gVEFJTFFfRklSU1QoJnNjLT5tcnNhc19tZmlfY21kX2xpc3RfaGVhZCk7Cisg ICAgICAgIFRBSUxRX1JFTU9WRSgmc2MtPm1yc2FzX21maV9jbWRfbGlzdF9oZWFkLCBjbWQsIG5l eHQpOworICAgIH0KKyAgICBtdHhfdW5sb2NrKCZzYy0+bWZpX2NtZF9wb29sX2xvY2spOworICAg IAorICAgIHJldHVybiBjbWQ7Cit9CisKKy8qKgorICogbXJzYXNfb2NyX3RocmVhZCAgICAgICAg ICAgICBUaHJlYWQgdG8gaGFuZGxlIE9DUi9LaWxsIEFkYXB0ZXIuCisgKiBpbnB1dDogICAgICAg ICAgICAgICBBZGFwdGVyIENvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNr IEZXIHN0YXR1cyByZWdpc3RlciBhbmQgZmxhZworICogZG9fdGltZW91dF9yZXNldCBmbGFnLiBJ dCB3aWxsIGRvIE9DUi9LaWxsIGFkYXB0ZXIgaWYKKyAqIEZXIGlzIGluIGZhdWx0IHN0YXRlIG9y IElPIHRpbWVkIG91dCBoYXMgdHJpZ2dlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQKK21yc2Fz X29jcl90aHJlYWQodm9pZCAqYXJnKQoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2M7Cisg ICAgdV9pbnQzMl90ICBmd19zdGF0dXMsIGZ3X3N0YXRlOworICAgICAgICAgICAgICAgICAgICAg IAorICAgIHNjID0gKHN0cnVjdCBtcnNhc19zb2Z0YyAqKWFyZzsKKworICAgIG1yc2FzX2Rwcmlu dChzYywgTVJTQVNfVFJBQ0UsICIlc1xuIiwgX19mdW5jX18pOworICAgICAgICAgCisgICAgc2Mt Pm9jcl90aHJlYWRfYWN0aXZlID0gMTsKKyAgICBtdHhfbG9jaygmc2MtPnNpbV9sb2NrKTsKKyAg ICBmb3IgKDs7KSB7CisgICAgICAgIC8qIFNsZWVwIGZvciAxIHNlY29uZCBhbmQgY2hlY2sgdGhl IHF1ZXVlIHN0YXR1cyovCisgICAgICAgIG1zbGVlcCgmc2MtPm9jcl9jaGFuLCAmc2MtPnNpbV9s b2NrLCBQUklCSU8sCisgICAgICAgICAgICAgICAibXJzYXNfb2NyIiwgc2MtPm1yc2FzX2Z3X2Zh dWx0X2NoZWNrX2RlbGF5ICogaHopOworICAgICAgICBpZiAoc2MtPnJlbW92ZV9pbl9wcm9ncmVz cykgeworICAgICAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsIAorCQkJCSJFeGl0 IGR1ZSB0byBzaHV0ZG93biBmcm9tICVzXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICBmd19zdGF0dXMgPSBtcnNhc19yZWFkX3JlZyhzYywgCisJ CQkJb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKyAgICAg ICAgZndfc3RhdGUgPSBmd19zdGF0dXMgJiBNRklfU1RBVEVfTUFTSzsKKyAgICAgICAgaWYgKGZ3 X3N0YXRlID09IE1GSV9TVEFURV9GQVVMVCB8fCBzYy0+ZG9fdGltZWRvdXRfcmVzZXQpIHsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIk9DUiBzdGFydGVkIGR1ZSB0 byAlcyFcbiIsCisgICAgICAgICAgICAgICAgIHNjLT5kb190aW1lZG91dF9yZXNldD8iSU8gVGlt ZW91dCI6CisgICAgICAgICAgICAgICAgICJGVyBmYXVsdCBkZXRlY3RlZCIpOworICAgICAgICAg ICAgbXR4X2xvY2tfc3Bpbigmc2MtPmlvY3RsX2xvY2spOworICAgICAgICAgICAgc2MtPnJlc2V0 X2luX3Byb2dyZXNzID0gMTsKKyAgICAgICAgICAgIHNjLT5yZXNldF9jb3VudCsrOworICAgICAg ICAgICAgbXR4X3VubG9ja19zcGluKCZzYy0+aW9jdGxfbG9jayk7CisgICAgICAgICAgICBtcnNh c194cHRfZnJlZXplKHNjKTsKKyAgICAgICAgICAgIG1yc2FzX3Jlc2V0X2N0cmwoc2MpOworICAg ICAgICAgICAgbXJzYXNfeHB0X3JlbGVhc2Uoc2MpOworICAgICAgICAgICAgc2MtPnJlc2V0X2lu X3Byb2dyZXNzID0gMDsKKyAgICAgICAgICAgIHNjLT5kb190aW1lZG91dF9yZXNldCA9IDA7Cisg ICAgICAgIH0KKyAgICB9CisgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICBzYy0+ b2NyX3RocmVhZF9hY3RpdmUgPSAwOworICAgIG1yc2FzX2twcm9jX2V4aXQoMCk7Cit9CisKKy8q KgorICogbXJzYXNfcmVzZXRfcmVwbHlfZGVzYyAgICAgICBSZXNldCBSZXBseSBkZXNjcmlwdG9y IGFzIHBhcnQgb2YgT0NSLgorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVy IENvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHJlcGx5IGRlc2NyaXB0 b3Igc28gdGhhdCBwb3N0IE9DUgorICogZHJpdmVyIGFuZCBGVyB3aWxsIGxvc3Qgb2xkIGhpc3Rv cnkuCisgKi8KK3ZvaWQgIG1yc2FzX3Jlc2V0X3JlcGx5X2Rlc2Moc3RydWN0IG1yc2FzX3NvZnRj ICpzYykKK3sKKyAgICBpbnQgaTsKKyAgICBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90IHJl cGx5X2Rlc2M7CisKKyAgICBzYy0+bGFzdF9yZXBseV9pZHggPSAwOworICAgIHJlcGx5X2Rlc2Mg PSBzYy0+cmVwbHlfZGVzY19tZW07CisgICAgZm9yIChpID0gMDsgaSA8IHNjLT5yZXBseV9xX2Rl cHRoOyBpKyssIHJlcGx5X2Rlc2MrKykgeworICAgICAgICByZXBseV9kZXNjLT5Xb3JkcyA9IE1S U0FTX1VMT05HX01BWDsKKyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfcmVzZXRfY3RybCAgICAg Q29yZSBmdW5jdGlvbiB0byBPQ1IvS2lsbCBhZGFwdGVyLgorICogaW5wdXQ6ICAgICAgICAgICAg ICAgQWRhcHRlciBDb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBydW4gZnJvbSB0 aHJlYWQgY29udGV4dCBzbyB0aGF0IGl0IGNhbiBzbGVlcC4KKyAqIDEuIERvIG5vdCBoYW5kbGUg T0NSIGlmIEZXIGlzIGluIEhXIGNyaXRpY2FsIGVycm9yLgorICogMi4gV2FpdCBmb3Igb3V0c3Rh bmRpbmcgY29tbWFuZCB0byBjb21wbGV0ZSBmb3IgMTgwIHNlY29uZHMuCisgKiAzLiBJZiAjMiBk b2VzIG5vdCBmaW5kIGFueSBvdXRzdGFuZGluZyBjb21tYW5kIENvbnRyb2xsZXIgaXMgaW4gd29y a2luZworICogc3RhdGUsIHNvIHNraXAgT0NSLgorICogT3RoZXJ3aXNlLCBkbyBPQ1Iva2lsbCBB ZGFwdGVyIGJhc2VkIG9uIGZsYWcgZGlzYWJsZU9ubGluZUN0cmxSZXNldC4KKyAqIDQuIFN0YXJ0 IG9mIHRoZSBPQ1IsIHJldHVybiBhbGwgU0NTSSBjb21tYW5kIGJhY2sgdG8gQ0FNIGxheWVyIHdo aWNoIGhhcworICogY2NiX3B0ci4KKyAqIDUuIFBvc3QgT0NSLCBSZS1maXJlIE1hbmFnbWVudCBj b21tYW5kIGFuZCBtb3ZlIENvbnRyb2xsZXIgdG8gT3BlcmF0aW9uCisgKiBzdGF0ZS4KKyAqLwor aW50IG1yc2FzX3Jlc2V0X2N0cmwoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBpbnQg cmV0dmFsID0gU1VDQ0VTUywgaSwgaiwgcmV0cnkgPSAwOworICAgIHVfaW50MzJfdCAgICAgICBo b3N0X2RpYWcsIGFic19zdGF0ZSwgc3RhdHVzX3JlZywgcmVzZXRfYWRhcHRlcjsKKyAgICB1bmlv biBjY2IgICAqY2NiOworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICptZmlfY21kOworICAgIHN0 cnVjdCBtcnNhc19tcHRfY21kICptcHRfY21kOworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRP Ul9VTklPTiAqcmVxX2Rlc2M7CisKKyAgICBpZiAoc2MtPmFkcHJlY292ZXJ5ID09IE1SU0FTX0hX X0NSSVRJQ0FMX0VSUk9SKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwK KyAgICAgICAgICAgICAgICAgICAgICAgICJtcnNhczogSGFyZHdhcmUgY3JpdGljYWwgZXJyb3Is IHJldHVybmluZyBGQUlMLlxuIik7CisgICAgICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAg IHNldF9iaXQoTVJTQVNfRlVTSU9OX0lOX1JFU0VULCAmc2MtPnJlc2V0X2ZsYWdzKTsKKyAgICBz Yy0+YWRwcmVjb3ZlcnkgPSBNUlNBU19BRFBSRVNFVF9TTV9JTkZBVUxUOworICAgIG1yc2FzX2Rp c2FibGVfaW50cihzYyk7CisgICAgREVMQVkoMTAwMCAqIDEwMDApOworCisgICAgLyogRmlyc3Qg dHJ5IHdhaXRpbmcgZm9yIGNvbW1hbmRzIHRvIGNvbXBsZXRlICovCisgICAgaWYgKG1yc2FzX3dh aXRfZm9yX291dHN0YW5kaW5nKHNjKSkgeworICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FT X09DUiwKKyAgICAgICAgICAgICAgICAgICAgICJyZXNldHRpbmcgYWRhcHRlciBmcm9tICVzLlxu IiwKKyAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgIC8qIE5vdyByZXR1 cm4gY29tbWFuZHMgYmFjayB0byB0aGUgQ0FNIGxheWVyICovCisgICAgICAgIGZvciAoaSA9IDAg OyBpIDwgc2MtPm1heF9md19jbWRzOyBpKyspIHsKKyAgICAgICAgICAgIG1wdF9jbWQgPSBzYy0+ bXB0X2NtZF9saXN0W2ldOworICAgICAgICAgICAgaWYgKG1wdF9jbWQtPmNjYl9wdHIpIHsKKyAg ICAgICAgICAgICAgICBjY2IgPSAodW5pb24gY2NiICopKG1wdF9jbWQtPmNjYl9wdHIpOworICAg ICAgICAgICAgICAgIGNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1NDU0lfQlVTX1JFU0VUOworICAg ICAgICAgICAgICAgIG1yc2FzX2NtZF9kb25lKHNjLCBtcHRfY21kKTsKKyAgICAgICAgICAgICAg ICBhdG9taWNfZGVjKCZzYy0+Zndfb3V0c3RhbmRpbmcpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAKKyAgICAgICAgc3RhdHVzX3JlZyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRv ZihtcnNhc19yZWdfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpOworICAgICAgICBhYnNf c3RhdGUgPSBzdGF0dXNfcmVnICYgTUZJX1NUQVRFX01BU0s7CisgICAgICAgIHJlc2V0X2FkYXB0 ZXIgPSBzdGF0dXNfcmVnICYgTUZJX1JFU0VUX0FEQVBURVI7CisgICAgICAgIGlmIChzYy0+ZGlz YWJsZU9ubGluZUN0cmxSZXNldCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGFic19zdGF0 ZSA9PSBNRklfU1RBVEVfRkFVTFQgJiYgIXJlc2V0X2FkYXB0ZXIpKSB7CisgICAgICAgICAgICAv KiBSZXNldCBub3Qgc3VwcG9ydGVkLCBraWxsIGFkYXB0ZXIgKi8KKyAgICAgICAgICAgIG1yc2Fz X2RwcmludChzYywgTVJTQVNfT0NSLCJSZXNldCBub3Qgc3VwcG9ydGVkLCBraWxsaW5nIGFkYXB0 ZXIuXG4iKTsKKyAgICAgICAgICAgIG1yc2FzX2tpbGxfaGJhKHNjKTsKKyAgICAgICAgICAgIHNj LT5hZHByZWNvdmVyeSA9IE1SU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworICAgICAgICAgICAgcmV0 dmFsID0gRkFJTDsKKyAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAg IC8qIE5vdyB0cnkgdG8gcmVzZXQgdGhlIGNoaXAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IE1SU0FTX0ZVU0lPTl9NQVhfUkVTRVRfVFJJRVM7IGkrKykgeworICAgICAgICAgICAgbXJzYXNf d3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25fc2VxX29mZnNldCks CisgICAgICAgICAgICAgICAgTVBJMl9XUlNFUV9GTFVTSF9LRVlfVkFMVUUpOworICAgICAgICAg ICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25fc2Vx X29mZnNldCksCisgICAgICAgICAgICAgICAgTVBJMl9XUlNFUV8xU1RfS0VZX1ZBTFVFKTsKKyAg ICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgZnVz aW9uX3NlcV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIE1QSTJfV1JTRVFfMk5EX0tFWV9WQUxV RSk7CisgICAgICAgICAgICBtcnNhc193cml0ZV9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19z ZXQsIGZ1c2lvbl9zZXFfb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBNUEkyX1dSU0VRXzNSRF9L RVlfVkFMVUUpOworICAgICAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNh c19yZWdfc2V0LCBmdXNpb25fc2VxX29mZnNldCksCisgICAgICAgICAgICAgICAgTVBJMl9XUlNF UV80VEhfS0VZX1ZBTFVFKTsKKyAgICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0 b2YobXJzYXNfcmVnX3NldCwgZnVzaW9uX3NlcV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIE1Q STJfV1JTRVFfNVRIX0tFWV9WQUxVRSk7CisgICAgICAgICAgICBtcnNhc193cml0ZV9yZWcoc2Ms IG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIGZ1c2lvbl9zZXFfb2Zmc2V0KSwKKyAgICAgICAgICAg ICAgICBNUEkyX1dSU0VRXzZUSF9LRVlfVkFMVUUpOworCisgICAgICAgICAgICAvKiBDaGVjayB0 aGF0IHRoZSBkaWFnIHdyaXRlIGVuYWJsZSAoRFJXRSkgYml0IGlzIG9uICovCisgICAgICAgICAg ICBob3N0X2RpYWcgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVzaW9uX2hvc3RfZGlhZykpOworICAgICAgICAgICAgcmV0cnkgPSAwOworICAgICAgICAgICAg d2hpbGUgKCEoaG9zdF9kaWFnICYgSE9TVF9ESUFHX1dSSVRFX0VOQUJMRSkpIHsKKyAgICAgICAg ICAgICAgICBERUxBWSgxMDAgKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBob3N0X2RpYWcgPSBt cnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzaW9uX2hvc3RfZGlh ZykpOworICAgICAgICAgICAgICAgIGlmIChyZXRyeSsrID09IDEwMCkgeworICAgICAgICAgICAg ICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwKKyAgICAgICAgICAgICAgICAgICAg Ikhvc3QgZGlhZyB1bmxvY2sgZmFpbGVkIVxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKGhv c3RfZGlhZyAmIEhPU1RfRElBR19XUklURV9FTkFCTEUpKQorICAgICAgICAgICAgICAgIGNvbnRp bnVlOworCisgICAgICAgICAgICAvKiBTZW5kIGNoaXAgcmVzZXQgY29tbWFuZCAqLworICAgICAg ICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25f aG9zdF9kaWFnKSwKKyAgICAgICAgICAgICAgIGhvc3RfZGlhZyB8IEhPU1RfRElBR19SRVNFVF9B REFQVEVSKTsKKyAgICAgICAgICAgIERFTEFZKDMwMDAgKiAxMDAwKTsKKworICAgICAgICAgICAg LyogTWFrZSBzdXJlIHJlc2V0IGFkYXB0ZXIgYml0IGlzIGNsZWFyZWQgKi8KKyAgICAgICAgICAg IGhvc3RfZGlhZyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm dXNpb25faG9zdF9kaWFnKSk7CisgICAgICAgICAgICByZXRyeSA9IDA7CisgICAgICAgICAgICB3 aGlsZSAoaG9zdF9kaWFnICYgSE9TVF9ESUFHX1JFU0VUX0FEQVBURVIpIHsKKyAgICAgICAgICAg ICAgICBERUxBWSgxMDAgKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBob3N0X2RpYWcgPSBtcnNh c19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzaW9uX2hvc3RfZGlhZykp OworICAgICAgICAgICAgICAgIGlmIChyZXRyeSsrID09IDEwMDApIHsKKyAgICAgICAgICAgICAg ICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkRpYWcgcmVzZXQgYWRhcHRlciBuZXZlciBjbGVhcmVkIVxuIik7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChob3N0X2RpYWcgJiBIT1NUX0RJQUdfUkVTRVRfQURBUFRF UikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYWJzX3N0YXRlID0g bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpICYgTUZJX1NUQVRF X01BU0s7CisgICAgICAgICAgICByZXRyeSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlICgoYWJz X3N0YXRlIDw9IE1GSV9TVEFURV9GV19JTklUKSAmJiAocmV0cnkrKyA8IDEwMDApKSB7CisgICAg ICAgICAgICAgICAgREVMQVkoMTAwICogMTAwMCk7CisgICAgICAgICAgICAgICAgYWJzX3N0YXRl ID0gbXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKSAmIE1GSV9T VEFURV9NQVNLOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFic19zdGF0ZSA8PSBN RklfU1RBVEVfRldfSU5JVCkgeworICAgICAgICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJT QVNfT0NSLCAiZmlybXdhcmUgc3RhdGUgPCBNRklfU1RBVEVfRldfSU5JVCwiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgc3RhdGUgPSAweCV4XG4iLCBhYnNfc3RhdGUpOworICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBX YWl0IGZvciBGVyB0byBiZWNvbWUgcmVhZHkgKi8KKyAgICAgICAgICAgIGlmIChtcnNhc190cmFu c2l0aW9uX3RvX3JlYWR5KHNjLCAxKSkgeworICAgICAgICAgICAgICAgIG1yc2FzX2RwcmludChz YywgTVJTQVNfT0NSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1yc2FzOiBGYWlsZWQg dG8gdHJhbnNpdGlvbiBjb250cm9sbGVyIHRvIHJlYWR5LlxuIik7CisgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1yc2FzX3Jlc2V0X3JlcGx5 X2Rlc2Moc2MpOworICAgICAgICAgICAgaWYgKG1yc2FzX2lvY19pbml0KHNjKSkgeworICAgICAg ICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJTQVNfT0NSLCAibXJzYXNfaW9jX2luaXQoKSBm YWlsZWQhXG4iKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgY2xlYXJfYml0KE1SU0FTX0ZVU0lPTl9JTl9SRVNFVCwgJnNjLT5yZXNldF9m bGFncyk7CisgICAgICAgICAgICBtcnNhc19lbmFibGVfaW50cihzYyk7CisgICAgICAgICAgICBz Yy0+YWRwcmVjb3ZlcnkgPSBNUlNBU19IQkFfT1BFUkFUSU9OQUw7CisKKyAgICAgICAgICAgIC8q IFJlLWZpcmUgbWFuYWdlbWVudCBjb21tYW5kcyAqLworICAgICAgICAgICAgZm9yIChqID0gMCA7 IGogPCBzYy0+bWF4X2Z3X2NtZHM7IGorKykgeworICAgICAgICAgICAgICAgIG1wdF9jbWQgPSBz Yy0+bXB0X2NtZF9saXN0W2pdOworICAgICAgICAgICAgICAgIGlmIChtcHRfY21kLT5zeW5jX2Nt ZF9pZHggIT0gKHVfaW50MzJfdClNUlNBU19VTE9OR19NQVgpIHsKKyAgICAgICAgICAgICAgICAg ICAgbWZpX2NtZCA9IHNjLT5tZmlfY21kX2xpc3RbbXB0X2NtZC0+c3luY19jbWRfaWR4XTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKG1maV9jbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJfRENNRF9MRF9NQVBfR0VU X0lORk8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZCht ZmlfY21kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbXB0X2NtZCht cHRfY21kKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAg ICAgICAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Moc2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWZpX2NtZC0+Y21kX2lkLmNvbnRleHQuc21pZCAtIDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlJlLWZpcmUgY29tbWFuZCBEQ01EIG9wY29kZSAweCV4IGlu ZGV4ICVkXG4gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZpX2NtZC0+ZnJhbWUt PmRjbWQub3Bjb2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVxX2Rlc2Mp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgYnVp bGQgTVBUIGNtZC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1yc2FzX2ZpcmVfY21kKHNjLCByZXFfZGVzYy0+YWRkci51Lmxv dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVxX2Rlc2MtPmFkZHIudS5oaWdoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogUmVzZXQgbG9hZCBiYWxh bmNlIGluZm8gKi8KKyAgICAgICAgICAgIG1lbXNldChzYy0+bG9hZF9iYWxhbmNlX2luZm8sIDAs IAorICAgICAgICAgICAgICAgICAgIHNpemVvZihMRF9MT0FEX0JBTEFOQ0VfSU5GTykgKiBNQVhf TE9HSUNBTF9EUklWRVMpOyAKKworICAgICAgICAgICAgaWYgKCFtcnNhc19nZXRfbWFwX2luZm8o c2MpKQorICAgICAgICAgICAgICAgIG1yc2FzX3N5bmNfbWFwX2luZm8oc2MpOworCisgICAgICAg ICAgICAvKiBBZGFwdGVyIHJlc2V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKyAgICAgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIlJlc2V0IHN1Y2Nlc3NmdWxcbiIpOwor ICAgICAgICAgICAgcmV0dmFsID0gU1VDQ0VTUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisgICAgICAgIC8qIFJlc2V0IGZhaWxlZCwga2lsbCB0aGUgYWRhcHRlciAqLworICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJSZXNldCBmYWlsZWQsIGtpbGxpbmcg YWRhcHRlci5cbiIpOworICAgICAgICBtcnNhc19raWxsX2hiYShzYyk7CisgICAgICAgIHJldHZh bCA9IEZBSUw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xlYXJfYml0KE1SU0FTX0ZVU0lPTl9J Tl9SRVNFVCwgJnNjLT5yZXNldF9mbGFncyk7CisgICAgICAgIG1yc2FzX2VuYWJsZV9pbnRyKHNj KTsKKyAgICAgICAgc2MtPmFkcHJlY292ZXJ5ID0gTVJTQVNfSEJBX09QRVJBVElPTkFMOworICAg IH0KK291dDoKKyAgICBjbGVhcl9iaXQoTVJTQVNfRlVTSU9OX0lOX1JFU0VULCAmc2MtPnJlc2V0 X2ZsYWdzKTsKKyAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwKKyAgICAgICAgICAgICJS ZXNldCBFeGl0IHdpdGggJWQuXG4iLCByZXR2YWwpOworICAgIHJldHVybiByZXR2YWw7Cit9CisK Ky8qKgorICogbXJzYXNfa2lsbF9oYmEgICAgICAgS2lsbCBIQkEgd2hlbiBPQ1IgaXMgbm90IHN1 cHBvcnRlZC4KKyAqIGlucHV0OiAgICAgICAgICAgICAgIEFkYXB0ZXIgQ29udGV4dC4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIHdpbGwga2lsbCBIQkEgd2hlbiBPQ1IgaXMgbm90IHN1cHBvcnRlZC4K KyAqLwordm9pZCBtcnNhc19raWxsX2hiYSAoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAg ICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisgICAgbXJz YXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBkb29yYmVsbCksCisgICAg ICAgICAgICAgICAgICAgICAgICBNRklfU1RPUF9BRFApOworICAgIC8qIEZsdXNoICovCisgICAg bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIGRvb3JiZWxsKSk7Cit9 CisKKy8qKgorICogbXJzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcgICAgICAgICAgIFdhaXQgZm9y IG91dHN0YW5kaW5nIGNvbW1hbmRzCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBDb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGZv ciAxODAgc2Vjb25kcyBmb3Igb3V0c3RhbmRpbmcKKyAqIGNvbW1hbmRzIHRvIGJlIGNvbXBsZXRl ZC4KKyAqLworaW50IG1yc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MpCit7CisgICAgaW50IGksIG91dHN0YW5kaW5nLCByZXR2YWwgPSAwOworICAgIHVfaW50 MzJfdCBmd19zdGF0ZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBNUlNBU19SRVNFVF9XQUlUX1RJ TUU7IGkrKykgeworICAgICAgICBpZiAoc2MtPnJlbW92ZV9pbl9wcm9ncmVzcykgeworICAgICAg ICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAgICAgICAgICAgIkRyaXZl ciByZW1vdmUgb3Igc2h1dGRvd24gY2FsbGVkLlxuIik7CisgICAgICAgICAgICByZXR2YWwgPSAx OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2hlY2sgaWYg ZmlybXdhcmUgaXMgaW4gZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgZndfc3RhdGUgPSBtcnNhc19y ZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpICYgTUZJX1NUQVRFX01BU0s7Cisg ICAgICAgIGlmIChmd19zdGF0ZSA9PSBNRklfU1RBVEVfRkFVTFQpIHsKKyAgICAgICAgICAgIG1y c2FzX2RwcmludChzYywgTVJTQVNfT0NSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGb3Vu ZCBGVyBpbiBGQVVMVCBzdGF0ZSwgd2lsbCByZXNldCBhZGFwdGVyLlxuIik7CisgICAgICAgICAg ICByZXR2YWwgPSAxOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAg b3V0c3RhbmRpbmcgPSBhdG9taWNfcmVhZCgmc2MtPmZ3X291dHN0YW5kaW5nKTsKKyAgICAgICAg aWYgKCFvdXRzdGFuZGluZykKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIGlmICgh KGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisgICAgICAgICAgICBtcnNhc19k cHJpbnQoc2MsIE1SU0FTX09DUiwgIlslMmRdd2FpdGluZyBmb3IgJWQgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY29tbWFuZHMgdG8gY29tcGxldGVcbiIsaSxvdXRzdGFuZGlu Zyk7CisgICAgICAgICAgICBtcnNhc19jb21wbGV0ZV9jbWQoc2MpOworICAgICAgICB9CisgICAg ICAgIERFTEFZKDEwMDAgKiAxMDAwKTsKKyAgICB9CisKKyAgICBpZiAoYXRvbWljX3JlYWQoJnNj LT5md19vdXRzdGFuZGluZykpIHsKKyAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1Is CisgICAgICAgICAgICAgICAgICAgICAgICAiIHBlbmRpbmcgY29tbWFuZHMgcmVtYWluIGFmdGVy IHdhaXRpbmcsIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB3aWxsIHJlc2V0IGFkYXB0ZXIu XG4iKTsKKyAgICAgICAgcmV0dmFsID0gMTsKKyAgICB9CitvdXQ6CisgICAgcmV0dXJuIHJldHZh bDsKK30KKworLyoqCisgKiBtcnNhc19yZWxlYXNlX21maV9jbWQ6IFJldHVybiBhIGNtZCB0byBm cmVlIGNvbW1hbmQgcG9vbAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICBDb21tYW5kIHBhY2tl dCBmb3IgcmV0dXJuIHRvIGZyZWUgY21kIHBvb2wgCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1 cm5zIHRoZSBNRkkgY29tbWFuZCB0byB0aGUgY29tbWFuZCBsaXN0LgorICovCit2b2lkIG1yc2Fz X3JlbGVhc2VfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MgPSBjbWQtPnNjOworCisgICAgbXR4X2xvY2soJnNjLT5tZmlfY21k X3Bvb2xfbG9jayk7CisgICAgY21kLT5jY2JfcHRyID0gTlVMTDsKKyAgICBjbWQtPmNtZF9pZC5m cmFtZV9jb3VudCA9IDA7CisgICAgVEFJTFFfSU5TRVJUX1RBSUwoJihzYy0+bXJzYXNfbWZpX2Nt ZF9saXN0X2hlYWQpLCBjbWQsIG5leHQpOworICAgIG10eF91bmxvY2soJnNjLT5tZmlfY21kX3Bv b2xfbG9jayk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X2NvbnRyb2xs ZXJfaW5mbyAtICAgICAgICBSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIGlu cHV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIgaW5mb3JtYXRpb24g c3RydWN0dXJlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdl dCB0aGUgRlcncyBjb250cm9sbGVyIHN0cnVjdHVyZS4KKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMg bWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgdGhlIG1heGltdW0gSU8gdHJhbnNmZXIgcGVyCisgKiBj b21tYW5kIHN1cHBvcnRlZCBieSB0aGUgRlcuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfZ2V0X2N0 cmxfaW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbXJzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pCit7CisgICAgaW50IHJldGNvZGUgPSAw OworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRf ZnJhbWUgKmRjbWQ7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisKKyAgICBp ZiAoIWNtZCkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJGYWlsZWQg dG8gZ2V0IGEgZnJlZSBjbWRcbiIpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9Cisg ICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisgICAgaWYgKG1yc2FzX2FsbG9jX2N0bHJf aW5mb19jbWQoc2MpICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJz YXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGdldCBjdGxyIGluZm8gY21kXG4iKTsKKyAgICAgICAg bXJzYXNfcmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAg IH0KKyAgICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRj bWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAg ICBkY21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9S RUFEOworICAgIGRjbWQtPnRpbWVvdXQgPSAwOworICAgIGRjbWQtPnBhZF8wID0gMDsKKyAgICBk Y21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtcnNhc19jdHJsX2luZm8pOworICAg IGRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9HRVRfSU5GTzsKKyAgICBkY21kLT5zZ2wuc2dl MzJbMF0ucGh5c19hZGRyID0gc2MtPmN0bHJfaW5mb19waHlzX2FkZHI7CisgICAgZGNtZC0+c2ds LnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZvKTsKKworICAg IGlmICghbXJzYXNfaXNzdWVfcG9sbGVkKHNjLCBjbWQpKSAKKyAgICAgICAgbWVtY3B5KGN0cmxf aW5mbywgc2MtPmN0bHJfaW5mb19tZW0sIHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZvKSk7 CisgICAgZWxzZSAKKyAgICAgICAgcmV0Y29kZSA9IDE7CisKKyAgICBtcnNhc19mcmVlX2N0bHJf aW5mb19jbWQoc2MpOworICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgIHJldHVy bihyZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19hbGxvY19jdGxyX2luZm9fY21kOiAgQWxs b2NhdGVzIG1lbW9yeSBmb3IgY29udHJvbGxlciBpbmZvIGNvbW1hbmQKKyAqIGlucHV0OiAgICAg ICAgICAgICAgICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBBbGxvY2F0ZXMgRE1B YWJsZSBtZW1vcnkgZm9yIHRoZSBjb250cm9sbGVyIGluZm8gaW50ZXJuYWwgY29tbWFuZC4KKyAq LworaW50IG1yc2FzX2FsbG9jX2N0bHJfaW5mb19jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykK K3sKKyAgICBpbnQgY3Rscl9pbmZvX3NpemU7CisKKyAgICAvKiBBbGxvY2F0ZSBnZXQgY29udHJv bGxlciBpbmZvIGNvbW1hbmQgKi8KKyAgICBjdGxyX2luZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bXJzYXNfY3RybF9pbmZvKTsKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNf cGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAw LCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRkcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGZp bHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Rscl9pbmZvX3Np emUsICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAg ICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdGxyX2luZm9fc2l6ZSwgICAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gbG9ja2Z1bmMs IGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPmN0bHJfaW5mb190YWcp KSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0 ZSBjdGxyIGluZm8gdGFnXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAg ICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+Y3Rscl9pbmZvX3RhZywgKHZvaWQgKiopJnNjLT5j dGxyX2luZm9fbWVtLAorICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+Y3Rscl9pbmZv X2RtYW1hcCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90 IGFsbG9jYXRlIGN0bHIgaW5mbyBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0p OworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT5jdGxyX2luZm9fdGFnLCBzYy0+ Y3Rscl9pbmZvX2RtYW1hcCwKKyAgICAgICAgICAgIHNjLT5jdGxyX2luZm9fbWVtLCBjdGxyX2lu Zm9fc2l6ZSwgbXJzYXNfYWRkcl9jYiwKKyAgICAgICAgICAgICZzYy0+Y3Rscl9pbmZvX3BoeXNf YWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2Fz X2RldiwgIkNhbm5vdCBsb2FkIGN0bHIgaW5mbyBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJu IChFTk9NRU0pOworICAgIH0KKworICAgIG1lbXNldChzYy0+Y3Rscl9pbmZvX21lbSwgMCwgY3Rs cl9pbmZvX3NpemUpOworICAgIHJldHVybiAoMCk7Cit9CisKKy8qKgorICogbXJzYXNfZnJlZV9j dGxyX2luZm9fY21kOiBGcmVlIG1lbW9yeSBmb3IgY29udHJvbGxlciBpbmZvIGNvbW1hbmQgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIERl YWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgZ2V0IGNvbnRyb2xsZXIgaW5mbyBjbWQuCisgKi8KK3Zv aWQgbXJzYXNfZnJlZV9jdGxyX2luZm9fY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7Cisg ICAgaWYgKHNjLT5jdGxyX2luZm9fcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFwX3VubG9h ZChzYy0+Y3Rscl9pbmZvX3RhZywgc2MtPmN0bHJfaW5mb19kbWFtYXApOworICAgIGlmIChzYy0+ Y3Rscl9pbmZvX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPmN0bHJf aW5mb190YWcsIHNjLT5jdGxyX2luZm9fbWVtLCBzYy0+Y3Rscl9pbmZvX2RtYW1hcCk7CisgICAg aWYgKHNjLT5jdGxyX2luZm9fdGFnICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ry b3koc2MtPmN0bHJfaW5mb190YWcpOworfQorCisvKioKKyAqIG1yc2FzX2lzc3VlX3BvbGxlZDog ICAgICAgIElzc3VlcyBhIHBvbGxpbmcgY29tbWFuZAorICogaW5wdXRzOiAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBD b21tYW5kIHBhY2tldCB0byBiZSBpc3N1ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBw b3N0aW5nIG9mIGludGVybmFsIGNvbW1hbmRzIHRvIEZpcm13YXJlLiAgTUZJIAorICogcmVxdWly ZXMgdGhlIGNtZF9zdGF0dXMgdG8gYmUgc2V0IHRvIDB4RkYgYmVmb3JlIHBvc3RpbmcuICBUaGUg bWF4aW11bgorICogd2FpdCB0aW1lIG9mIHRoZSBwb2xsIHJlc3BvbnNlIHRpbWVyIGlzIDE4MCBz ZWNvbmRzLgorICovCitpbnQgbXJzYXNfaXNzdWVfcG9sbGVkKHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgc3RydWN0IG1yc2FzX2hlYWRl ciAqZnJhbWVfaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9 IE1SU0FTX0lOVEVSTkFMX0NNRF9XQUlUX1RJTUU7CisgICAgaW50IGksIHJldGNvZGUgPSAwOwor CisgICAgZnJhbWVfaGRyLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAgICBmcmFtZV9oZHItPmZsYWdz IHw9IE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUU7CisKKyAgICAvKiBJc3N1ZSB0 aGUgZnJhbWUgdXNpbmcgaW5ib3VuZCBxdWV1ZSBwb3J0ICovCisgICAgaWYgKG1yc2FzX2lzc3Vl X2RjbWQoc2MsIGNtZCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGlzc3VlIERDTUQgaW50ZXJuYWwgY29tbWFuZC5cbiIpOworICAgICAgICByZXR1cm4o MSk7CisgICAgfQorCisgICAgLyogCisgICAgICogUG9sbCByZXNwb25zZSB0aW1lciB0byB3YWl0 IGZvciBGaXJtd2FyZSByZXNwb25zZS4gIFdoaWxlIHRoaXMgICAKKyAgICAgKiB0aW1lciB3aXRo IHRoZSBERUxBWSBjYWxsIGNvdWxkIGJsb2NrIENQVSwgdGhlIHRpbWUgaW50ZXJ2YWwgZm9yIAor ICAgICAqIHRoaXMgaXMgb25seSAxIG1pbGxpc2Vjb25kLiAKKyAgICAgKi8KKyAgICBpZiAoZnJh bWVfaGRyLT5jbWRfc3RhdHVzID09IDB4RkYpIHsKKyAgICAgICAgZm9yIChpPTA7IGkgPCAobWF4 X3dhaXQgKiAxMDAwKTsgaSsrKXsKKyAgICAgICAgICAgIGlmIChmcmFtZV9oZHItPmNtZF9zdGF0 dXMgPT0gMHhGRikKKyAgICAgICAgICAgICAgICBERUxBWSgxMDAwKTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKyAgICB9CisgICAgaWYgKGZy YW1lX2hkci0+Y21kX3N0YXR1cyAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lX2hkci0+ Y21kX3N0YXR1cyA9PSAweEZGKQorICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNf ZGV2LCAiRENNRCB0aW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kcy5cbiIsIG1heF93YWl0KTsgCisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkRD TUQgZmFpbGVkLCBzdGF0dXMgPSAweCV4XG4iLCBmcmFtZV9oZHItPmNtZF9zdGF0dXMpOworICAg ICAgICByZXRjb2RlID0gMTsKKyAgICB9CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioK KyAqIG1yc2FzX2lzc3VlX2RjbWQgLSAgICAgSXNzdWVzIGEgTUZJIFBhc3MgdGhydSBjbWQKKyAq IGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAg ICAgICAgICAgICAgIG1maSBjbWQgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGJ5IG1yc2FzX2lzc3VlZF9ibG9ja2VkX2NtZCgpIGFuZAorICogbXJzYXNfaXNzdWVkX3Bv bGxlZCgpLCB0byBidWlsZCB0aGUgTVBUIGNvbW1hbmQgYW5kIHRoZW4gZmlyZSB0aGUgCisgKiBj b21tYW5kIHRvIEZpcm13YXJlLiAKKyAqLworaW50CittcnNhc19pc3N1ZV9kY21kKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgTVJTQVNf UkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICpyZXFfZGVzYzsKKworICAgIHJlcV9kZXNjID0gbXJz YXNfYnVpbGRfbXB0X2NtZChzYywgY21kKTsKKyAgICBpZiAoIXJlcV9kZXNjKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBidWlsZCBNUFQgY21kLlxuIik7 CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKyAgICBtcnNhc19maXJlX2NtZChzYywgcmVx X2Rlc2MtPmFkZHIudS5sb3csIHJlcV9kZXNjLT5hZGRyLnUuaGlnaCk7CisKKyAgICByZXR1cm4o MCk7Cit9CisKKy8qKgorICogbXJzYXNfYnVpbGRfbXB0X2NtZCAtIENhbGxzIGhlbHBlciBmdW5j dGlvbiB0byBidWlsZCBQYXNzdGhydSBjbWQKKyAqIGlucHV0OiAgICAgICAgICAgICAgICBBZGFw dGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBtZmkgY21kIHRvIGJ1aWxk CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbXJzYXNfaXNzdWVfY21kKCkgdG8g YnVpbGQgdGhlIE1QVC1NRkkKKyAqIHBhc3N0aHJ1IGNvbW1hbmQgYW5kIHByZXBhcmVzIHRoZSBN UFQgY29tbWFuZCB0byBzZW5kIHRvIEZpcm13YXJlLgorICovCitNUlNBU19SRVFVRVNUX0RFU0NS SVBUT1JfVU5JT04gKgorbXJzYXNfYnVpbGRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj LCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJ UFRPUl9VTklPTiAqcmVxX2Rlc2M7CisgICAgdV9pbnQxNl90IGluZGV4OworCisgICAgaWYgKG1y c2FzX2J1aWxkX21wdG1maV9wYXNzdGhydShzYywgY21kKSkgeworICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYnVpbGQgTVBULU1GSSBwYXNzdGhydSBjbWQuXG4i KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaW5kZXggPSBjbWQtPmNtZF9p ZC5jb250ZXh0LnNtaWQ7CisKKyAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Mo c2MsIGluZGV4LTEpOworICAgIGlmKCFyZXFfZGVzYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK KyAgICByZXFfZGVzYy0+YWRkci5Xb3JkcyA9IDA7CisgICAgcmVxX2Rlc2MtPlNDU0lJTy5SZXF1 ZXN0RmxhZ3MgPSAoTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTyA8PCBNUlNBU19SRVFf REVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCk7CisKKyAgICByZXFfZGVzYy0+U0NTSUlPLlNNSUQg PSBpbmRleDsKKworICAgIHJldHVybihyZXFfZGVzYyk7Cit9CisKKy8qKgorICogbXJzYXNfYnVp bGRfbXB0bWZpX3Bhc3N0aHJ1IC0gQnVpbGRzIGEgTVBUIE1GSSBQYXNzdGhydSBjb21tYW5kIAor ICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmkgY21kIHBvaW50ZXIgCisgKgorICogVGhl IE1QVCBjb21tYW5kIGFuZCB0aGUgaW9fcmVxdWVzdCBhcmUgc2V0dXAgYXMgYSBwYXNzdGhydSBj b21tYW5kLiAKKyAqIFRoZSBTR0UgY2hhaW4gYWRkcmVzcyBpcyBzZXQgdG8gZnJhbWVfcGh5c19h ZGRyIG9mIHRoZSBNRkkgY29tbWFuZC4gCisgKi8KK3VfaW50OF90CittcnNhc19idWlsZF9tcHRt ZmlfcGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQg Km1maV9jbWQpCit7CisgICAgTVBJMjVfSUVFRV9TR0VfQ0hBSU42NCAqbXBpMjVfaWVlZV9jaGFp bjsKKyAgICBQVFJfTVJTQVNfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgaW9fcmVxOworICAgIHN0cnVj dCBtcnNhc19tcHRfY21kICptcHRfY21kOworICAgIHN0cnVjdCBtcnNhc19oZWFkZXIgKmZyYW1l X2hkciA9ICZtZmlfY21kLT5mcmFtZS0+aGRyOworCisgICAgbXB0X2NtZCA9IG1yc2FzX2dldF9t cHRfY21kKHNjKTsKKyAgICBpZiAoIW1wdF9jbWQpCisgICAgICAgIHJldHVybigxKTsKKworICAg IC8qIFNhdmUgdGhlIHNtaWQuIFRvIGJlIHVzZWQgZm9yIHJldHVybmluZyB0aGUgY21kICovCisg ICAgbWZpX2NtZC0+Y21kX2lkLmNvbnRleHQuc21pZCA9IG1wdF9jbWQtPmluZGV4OworCisgICAg bXB0X2NtZC0+c3luY19jbWRfaWR4ID0gbWZpX2NtZC0+aW5kZXg7CisKKyAgICAvKgorICAgICAq IEZvciBjbWRzIHdoZXJlIHRoZSBmbGFnIGlzIHNldCwgc3RvcmUgdGhlIGZsYWcgYW5kIGNoZWNr CisgICAgICogb24gY29tcGxldGlvbi4gRm9yIGNtZHMgd2l0aCB0aGlzIGZsYWcsIGRvbid0IGNh bGwKKyAgICAgKiBtcnNhc19jb21wbGV0ZV9jbWQuCisgICAgICovCisKKyAgICBpZiAoZnJhbWVf aGRyLT5mbGFncyAmIE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUUpCisgICAgICAg IG1wdF9jbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRTsKKwor ICAgIGlvX3JlcSA9IG1wdF9jbWQtPmlvX3JlcXVlc3Q7CisKKyAgICBtcGkyNV9pZWVlX2NoYWlu ID0gKE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKikmaW9fcmVxLT5TR0wuSWVlZUNoYWluOworCisg ICAgaW9fcmVxLT5GdW5jdGlvbiAgICA9IE1SU0FTX01QSTJfRlVOQ1RJT05fUEFTU1RIUlVfSU9f UkVRVUVTVDsKKyAgICBpb19yZXEtPlNHTE9mZnNldDAgID0gb2Zmc2V0b2YoTVJTQVNfUkFJRF9T Q1NJX0lPX1JFUVVFU1QsIFNHTCkgLyA0OworICAgIGlvX3JlcS0+Q2hhaW5PZmZzZXQgPSBzYy0+ Y2hhaW5fb2Zmc2V0X21maV9wdGhydTsKKworICAgIG1waTI1X2llZWVfY2hhaW4tPkFkZHJlc3Mg PSBtZmlfY21kLT5mcmFtZV9waHlzX2FkZHI7CisKKyAgICBtcGkyNV9pZWVlX2NoYWluLT5GbGFn cz0gSUVFRV9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCB8CisgICAgICAgICAgICAgIE1QSTJfSUVF RV9TR0VfRkxBR1NfSU9DUExCTlRBX0FERFI7CisKKyAgICBtcGkyNV9pZWVlX2NoYWluLT5MZW5n dGggPSBNUlNBU19NQVhfU1pfQ0hBSU5fRlJBTUU7CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8q KgorICogbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQgLSBTeW5jaHJvbm91cyB3cmFwcGVyIGFyb3Vu ZCByZWd1bGFyIEZXIGNtZHMKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBz b2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQgdG8gYmUgaXNz dWVkCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhbiBldmVudCBmb3IgdGhlIGNvbW1h bmQgdG8gYmUgcmV0dXJuZWQgCisgKiBmcm9tIHRoZSBJU1IuIE1heCB3YWl0IHRpbWUgaXMgTVJT QVNfSU5URVJOQUxfQ01EX1dBSVRfVElNRSBzZWNzLgorICogVXNlZCBmb3IgaXNzdWluZyBpbnRl cm5hbCBhbmQgaW9jdGwgY29tbWFuZHMuCisgKi8KK2ludCBtcnNhc19pc3N1ZV9ibG9ja2VkX2Nt ZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQorewor ICAgIHVfaW50OF90IG1heF93YWl0ID0gTVJTQVNfSU5URVJOQUxfQ01EX1dBSVRfVElNRTsKKyAg ICB1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUgPSAwOworICAgIGludCByZXRjb2RlID0gMDsKKwor ICAgIC8qIEluaXRpYWxpemUgY21kX3N0YXR1cyAqLworICAgIGNtZC0+Y21kX3N0YXR1cyA9IEVD T05OUkVGVVNFRDsKKworICAgIC8qIEJ1aWxkIE1QVC1NRkkgY29tbWFuZCBmb3IgaXNzdWUgdG8g RlcgKi8KKyAgICBpZiAobXJzYXNfaXNzdWVfZGNtZChzYywgY21kKSl7CisgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBpc3N1ZSBEQ01EIGludGVybmFsIGNvbW1h bmQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworICAgIHNjLT5jaGFuID0gKHZv aWQqKSZjbWQ7CisKKyAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBkZWJ1ZyBvbmx5Li4uICov CisgICAgLy9kZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsIkRDTUQgaXNzdWVkIHRvIEZXLCBh Ym91dCB0byBzbGVlcC13YWl0Li4uXG4iKTsKKyAgICAvL2RldmljZV9wcmludGYoc2MtPm1yc2Fz X2Rldiwic2MtPmNoYW4gPSAlcFxuIiwgc2MtPmNoYW4pOworCisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICBpZiAoY21kLT5jbWRfc3RhdHVzID09IEVDT05OUkVGVVNFRCl7CisgICAgICAgICAgIHRz bGVlcCgodm9pZCAqKSZzYy0+Y2hhbiwgMCwgIm1yc2FzX3NsZWVwIiwgaHopOworICAgICAgIH0K KyAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgICAgIHRvdGFsX3RpbWUrKzsKKyAg ICAgICBpZiAodG90YWxfdGltZSA+PSBtYXhfd2FpdCkgeworICAgICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJJbnRlcm5hbCBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAlZCBz ZWNvbmRzLlxuIiwgbWF4X3dhaXQpOworICAgICAgICAgICByZXRjb2RlID0gMTsKKyAgICAgICAg ICAgYnJlYWs7CisgICAgICAgfSAKKyAgICB9IAorICAgIHJldHVybihyZXRjb2RlKTsKK30KKwor LyoqCisgKiBtcnNhc19jb21wbGV0ZV9tcHRtZmlfcGFzc3RocnUgLSBDb21wbGV0ZXMgYSBjb21t YW5kCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgICAgICBzYzogQWRhcHRlciBzb2Z0 IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6IENvbW1hbmQg dG8gYmUgY29tcGxldGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0 dXM6IGNtZCBjb21wbGV0aW9uIHN0YXR1cyAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBmcm9tIG1yc2FzX2NvbXBsZXRlX2NtZCgpIGFmdGVyIGFuIGludGVycnVwdCAKKyAqIGlzIHJl Y2VpdmVkIGZyb20gRmlybXdhcmUsIGFuZCBpb19yZXF1ZXN0LT5GdW5jdGlvbiBpcyAKKyAqIE1S U0FTX01QSTJfRlVOQ1RJT05fUEFTU1RIUlVfSU9fUkVRVUVTVC4KKyAqLwordm9pZAorbXJzYXNf Y29tcGxldGVfbXB0bWZpX3Bhc3N0aHJ1KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBt cnNhc19tZmlfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgICB1X2ludDhfdCBzdGF0dXMp Cit7CisgICAgc3RydWN0IG1yc2FzX2hlYWRlciAqaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKKyAg ICB1X2ludDhfdCBjbWRfc3RhdHVzID0gY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXM7CisKKyAg ICAvKiBSZXNldCB0aGUgcmV0cnkgY291bnRlciBmb3IgZnV0dXJlIHJlLXRyaWVzICovIAorICAg IGNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0ID0gMDsKKworICAgIGlmIChjbWQtPmNjYl9wdHIpCisg ICAgICAgIGNtZC0+Y2NiX3B0ciA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKGhkci0+Y21kKSB7Cisg ICAgICAgIGNhc2UgTUZJX0NNRF9JTlZBTElEOgorICAgICAgICAgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiTUZJX0NNRF9JTlZBTElEIGNvbW1hbmQuXG4iKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIE1GSV9DTURfUERfU0NTSV9JTzoKKyAgICAgICAgY2FzZSBN RklfQ01EX0xEX1NDU0lfSU86CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTUZJX0NN RF9QRF9TQ1NJX0lPIGFuZCBNRklfQ01EX0xEX1NDU0lfSU8gY291bGQgaGF2ZSBiZWVuCisgICAg ICAgICAgICAgKiBpc3N1ZWQgZWl0aGVyIHRocm91Z2ggYW4gSU8gcGF0aCBvciBhbiBJT0NUTCBw YXRoLiBJZiBpdAorICAgICAgICAgICAgICogd2FzIHZpYSBJT0NUTCwgd2Ugd2lsbCBzZW5kIGl0 IHRvIGludGVybmFsIGNvbXBsZXRpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlm IChjbWQtPnN5bmNfY21kKSB7CisgICAgICAgICAgICAgICAgY21kLT5zeW5jX2NtZCA9IDA7Cisg ICAgICAgICAgICAgICAgbXJzYXNfd2FrZXVwKHNjLCBjbWQpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE1GSV9DTURfU01QOgorICAgICAgICBj YXNlIE1GSV9DTURfU1RQOgorICAgICAgICBjYXNlIE1GSV9DTURfRENNRDoKKyAgICAgICAgICAg IC8qIENoZWNrIGZvciBMRCBtYXAgdXBkYXRlICovCisgICAgICAgICAgICBpZiAoKGNtZC0+ZnJh bWUtPmRjbWQub3Bjb2RlID09IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPKSAmJiAKKyAgICAgICAg ICAgICAgICAoY21kLT5mcmFtZS0+ZGNtZC5tYm94LmJbMV0gPT0gMSkpIHsKKwkJbXR4X2xvY2so JnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAgICAgIGlmIChjbWRfc3RhdHVzICE9IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtZF9zdGF0dXMgIT0gTUZJX1NUQVRfTk9UX0ZP VU5EKQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAibWFwIHN5bmMgZmFpbGVkLCBzdGF0dXM9JXhcbiIsY21kX3N0YXR1cyk7CisgICAgICAgICAg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbXJzYXNfcmVsZWFzZV9t ZmlfY21kKGNtZCk7CisJCSAgICAgICAgbXR4X3VubG9jaygmc2MtPnJhaWRtYXBfbG9jayk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAg ICAgc2MtPm1hcF9pZCsrOworICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChj bWQpOworICAgICAgICAgICAgICAgIGlmIChNUl9WYWxpZGF0ZU1hcEluZm8oc2MpKQorICAgICAg ICAgICAgICAgICAgICBzYy0+ZmFzdF9wYXRoX2lvID0gMDsKKyAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgIHNjLT5mYXN0X3BhdGhfaW8gPSAxOworICAgICAgICAgICAg ICAgIG1yc2FzX3N5bmNfbWFwX2luZm8oc2MpOworICAgICAgICAgICAgICAgIG10eF91bmxvY2so JnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorI2lmIDAgLy9jdXJyZW50bHkgbm90IHN1cHBvcnRpbmcgZXZlbnQgaGFuZGxpbmcsIHNvIGNv bW1lbnRpbmcgb3V0CisgICAgICAgICAgICBpZiAoY21kLT5mcmFtZS0+ZGNtZC5vcGNvZGUgPT0g TVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPIHx8CisgICAgICAgICAgICAgICAgICAgIGNtZC0+ ZnJhbWUtPmRjbWQub3Bjb2RlID09IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVQpIHsKKyAgICAgICAg ICAgICAgICBtcnNhc19wb2xsX3dhaXRfYWVuID0gMDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgor ICAgICAgICAgICAgLyogU2VlIGlmIGdvdCBhbiBldmVudCBub3RpZmljYXRpb24gKi8KKyAgICAg ICAgICAgIGlmIChjbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0NUUkxfRVZFTlRf V0FJVCkKKyAgICAgICAgICAgICAgICBtcnNhc19jb21wbGV0ZV9hZW4oc2MsIGNtZCk7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbXJzYXNfd2FrZXVwKHNjLCBjbWQpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUZJX0NNRF9BQk9SVDoKKyAgICAgICAgICAg IC8qIENvbW1hbmQgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21kIHJldHVybiAqLworICAgICAg ICAgICAgbXJzYXNfY29tcGxldGVfYWJvcnQoc2MsIGNtZCk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rl diwiVW5rbm93biBjb21tYW5kIGNvbXBsZXRlZCEgWzB4JVhdXG4iLCBoZHItPmNtZCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfd2FrZXVwIC0gICAgICAg ICBDb21wbGV0ZXMgYW4gaW50ZXJuYWwgY29tbWFuZAorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZCB0 byBiZSBjb21wbGV0ZWQKKyAqCisgKiBJbiBtcnNhc19pc3N1ZV9ibG9ja2VkX2NtZCgpLCBhZnRl ciBhIGNvbW1hbmQgaXMgaXNzdWVkIHRvIEZpcm13YXJlLCAKKyAqIGEgd2FpdCB0aW1lciBpcyBz dGFydGVkLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSAgCisgKiBtcnNhc19jb21wbGV0 ZV9tcHRtZmlfcGFzc3RocnUoKSBhcyBpdCBjb21wbGV0ZXMgdGhlIGNvbW1hbmQsCisgKiB0byB3 YWtlIHVwIGZyb20gdGhlIGNvbW1hbmQgd2FpdC4KKyAqLwordm9pZCBtcnNhc193YWtldXAoc3Ry dWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCkKK3sKKyAgICBj bWQtPmNtZF9zdGF0dXMgPSBjbWQtPmZyYW1lLT5pby5jbWRfc3RhdHVzOworCisgICAgaWYgKGNt ZC0+Y21kX3N0YXR1cyA9PSBFQ09OTlJFRlVTRUQpIAorICAgICAgICBjbWQtPmNtZF9zdGF0dXMg PSAwOworCisgICAgLyogRm9yIGRlYnVnIG9ubHkgLi4uICovIAorICAgIC8vZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCJEQ01EIHJlYydkIGZvciB3YWtldXAsIHNjLT5jaGFuPSVwXG4iLCBz Yy0+Y2hhbik7CisKKyAgICBzYy0+Y2hhbiA9ICh2b2lkKikmY21kOworICAgIHdha2V1cF9vbmUo KHZvaWQgKikmc2MtPmNoYW4pOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBtcnNhc19zaHV0 ZG93bl9jdGxyOiAgICAgICBJbnN0cnVjdHMgRlcgdG8gc2h1dGRvd24gdGhlIGNvbnRyb2xsZXIK KyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgU2h1dGRvd24vSGliZXJuYXRlCisgKgorICogVGhpcyBm dW5jdGlvbiBpc3N1ZXMgYSBEQ01EIGludGVybmFsIGNvbW1hbmQgdG8gRmlybXdhcmUgdG8gaW5p dGlhdGUKKyAqIHNodXRkb3duIG9mIHRoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBt cnNhc19zaHV0ZG93bl9jdGxyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHVfaW50MzJfdCBvcGNv ZGUpCit7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNf ZGNtZF9mcmFtZSAqZGNtZDsKKworICAgIGlmIChzYy0+YWRwcmVjb3ZlcnkgPT0gTVJTQVNfSFdf Q1JJVElDQUxfRVJST1IpCisgICAgICAgIHJldHVybjsKKworICAgIGNtZCA9IG1yc2FzX2dldF9t ZmlfY21kKHNjKTsKKyAgICBpZiAoIWNtZCkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsIkNhbm5vdCBhbGxvY2F0ZSBmb3Igc2h1dGRvd24gY21kLlxuIik7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKwlpZiAoc2MtPmFlbl9jbWQpCQkKKyAgICAgICAgbXJzYXNfaXNz dWVfYmxvY2tlZF9hYm9ydF9jbWQoc2MsIHNjLT5hZW5fY21kKTsKKyAgICAKKwlpZiAoc2MtPm1h cF91cGRhdGVfY21kKQorICAgICAgICBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChzYywg c2MtPm1hcF91cGRhdGVfY21kKTsKKworICAgIGRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKyAg ICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRjbWQtPmNt ZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHgwOworICAgIGRjbWQt PnNnZV9jb3VudCA9IDA7CisgICAgZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7Cisg ICAgZGNtZC0+dGltZW91dCA9IDA7CisgICAgZGNtZC0+cGFkXzAgPSAwOworICAgIGRjbWQtPmRh dGFfeGZlcl9sZW4gPSAwOworICAgIGRjbWQtPm9wY29kZSA9IG9wY29kZTsKKworICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwiUHJlcGFyaW5nIHRvIHNodXQgZG93biBjb250cm9sbGVy LlxuIik7CisKKyAgICBtcnNhc19pc3N1ZV9ibG9ja2VkX2NtZChzYywgY21kKTsKKyAgICBtcnNh c19yZWxlYXNlX21maV9jbWQoY21kKTsKKworICAgIHJldHVybjsKK30KKworLyoqCisgKiBtcnNh c19mbHVzaF9jYWNoZTogICAgICAgICBSZXF1ZXN0cyBGVyB0byBmbHVzaCBhbGwgaXRzIGNhY2hl cyAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgaXNzdWVzIGEgRENNRCBpbnRlcm5hbCBjb21tYW5kIHRvIEZp cm13YXJlIHRvIGluaXRpYXRlCisgKiBmbHVzaGluZyBvZiBhbGwgY2FjaGVzLgorICovCitzdGF0 aWMgdm9pZCBtcnNhc19mbHVzaF9jYWNoZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAg IHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUg KmRjbWQ7CisKKyAgICBpZiAoc2MtPmFkcHJlY292ZXJ5ID09IE1SU0FTX0hXX0NSSVRJQ0FMX0VS Uk9SKQorICAgICAgICByZXR1cm47CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7 CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCJD YW5ub3QgYWxsb2NhdGUgZm9yIGZsdXNoIGNhY2hlIGNtZC5cbiIpOworICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworICAgIG1lbXNldChkY21k LT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisgICAgZGNtZC0+Y21kID0gTUZJX0NNRF9E Q01EOworICAgIGRjbWQtPmNtZF9zdGF0dXMgPSAweDA7CisgICAgZGNtZC0+c2dlX2NvdW50ID0g MDsKKyAgICBkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKKyAgICBkY21kLT50aW1l b3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0YV94ZmVyX2xlbiA9 IDA7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNIOworICAgIGRj bWQtPm1ib3guYlswXSA9IE1SX0ZMVVNIX0NUUkxfQ0FDSEUgfCBNUl9GTFVTSF9ESVNLX0NBQ0hF OworCisgICAgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc2MsIGNtZCk7CisgICAgbXJzYXNfcmVs ZWFzZV9tZmlfY21kKGNtZCk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogbXJzYXNfZ2V0 X21hcF9pbmZvOiAgICAgICAgTG9hZCBhbmQgdmFsaWRhdGUgUkFJRCBtYXAgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGNhbGxzIG1yc2FzX2dldF9sZF9tYXBfaW5mbygpIGFuZCBNUl9WYWxpZGF0 ZU1hcEluZm8oKQorICogdG8gbG9hZCBhbmQgdmFsaWRhdGUgUkFJRCBtYXAuICBJdCByZXR1cm5z IDAgaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlci0KKyAqIHdpc2UuIAorICovCitzdGF0aWMgaW50IG1y c2FzX2dldF9tYXBfaW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreyAKKyAgIHVpbnQ4X3Qg IHJldGNvZGUgPSAwOworCisgICAgc2MtPmZhc3RfcGF0aF9pbyA9IDA7CisgICAgaWYgKCFtcnNh c19nZXRfbGRfbWFwX2luZm8oc2MpKSB7CisgICAgICAgIHJldGNvZGUgPSBNUl9WYWxpZGF0ZU1h cEluZm8oc2MpOworICAgICAgICBpZiAocmV0Y29kZSA9PSAwKSB7IAorICAgICAgICAgICAgc2Mt PmZhc3RfcGF0aF9pbyA9IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg IH0KKyAgICByZXR1cm4gMTsKK30KKworLyoqCisgKiBtcnNhc19nZXRfbGRfbWFwX2luZm86ICAg ICAgR2V0IEZXJ3MgbGRfbWFwIHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5h bCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBz dHJ1Y3R1cmUuICAKKyAqLworc3RhdGljIGludCBtcnNhc19nZXRfbGRfbWFwX2luZm8oc3RydWN0 IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBpbnQgcmV0Y29kZSA9IDA7CisgICAgc3RydWN0IG1y c2FzX21maV9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKyAg ICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcDsKKyAgICBidXNfYWRkcl90IG1hcF9waHlzX2FkZHIg PSAwOworCisgICAgY21kID0gbXJzYXNfZ2V0X21maV9jbWQoc2MpOworICAgIGlmICghY21kKSB7 CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBmb3Ig bGQgbWFwIGluZm8gY21kLlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGRj bWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworICAgIG1hcCA9IHNjLT5yYWlkbWFwX21lbVsoc2Mt Pm1hcF9pZCAmIDEpXTsKKyAgICBtYXBfcGh5c19hZGRyID0gc2MtPnJhaWRtYXBfcGh5c19hZGRy WyhzYy0+bWFwX2lkICYgMSldOworICAgIGlmICghbWFwKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIGxkIG1hcCBpbmZvLlxu Iik7CisgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgICAgICByZXR1cm4g KEVOT01FTSk7CisgICAgfQorICAgIG1lbXNldChtYXAsIDAsIHNpemVvZigqbWFwKSk7CisgICAg bWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKyAgICBkY21kLT5jbWQg PSBNRklfQ01EX0RDTUQ7CisgICAgZGNtZC0+Y21kX3N0YXR1cyA9IDB4RkY7CisgICAgZGNtZC0+ c2dlX2NvdW50ID0gMTsKKyAgICBkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKyAg ICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0 YV94ZmVyX2xlbiA9IHNjLT5tYXBfc3o7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9MRF9N QVBfR0VUX0lORk87CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IG1hcF9waHlz X2FkZHI7CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNjLT5tYXBfc3o7CisgICAg aWYgKCFtcnNhc19pc3N1ZV9wb2xsZWQoc2MsIGNtZCkpCisgICAgICAgIHJldGNvZGUgPSAwOwor ICAgIGVsc2UgIAorICAgIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi RmFpbCB0byBzZW5kIGdldCBMRCBtYXAgaW5mbyBjbWQuXG4iKTsKKyAgICAgICAgcmV0Y29kZSA9 IDE7CisgICAgfQorICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgIHJldHVybihy ZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19zeW5jX21hcF9pbmZvOiAgICAgICAgR2V0IEZX J3MgbGRfbWFwIHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgIEFkYXB0 ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5k IChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUu ICAKKyAqLworc3RhdGljIGludCBtcnNhc19zeW5jX21hcF9pbmZvKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MpCit7CisgICAgaW50IHJldGNvZGUgPSAwLCBpOworICAgIHN0cnVjdCBtcnNhc19tZmlf Y21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisgICAgdWludDMy X3Qgc2l6ZV9zeW5jX2luZm8sIG51bV9sZHM7CisgICAgTVJfTERfVEFSR0VUX1NZTkMgKnRhcmdl dF9tYXAgPSBOVUxMOworICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwOworICAgIE1SX0xEX1JB SUQgICpyYWlkOworICAgIE1SX0xEX1RBUkdFVF9TWU5DICpsZF9zeW5jOworICAgIGJ1c19hZGRy X3QgbWFwX3BoeXNfYWRkciA9IDA7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7 CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGFsbG9jIGZvciBzeW5jIG1hcCBpbmZvIGNtZFxuIik7CisgICAgICAgIHJldHVybiAx OworICAgIH0KKworICAgIG1hcCA9IHNjLT5yYWlkbWFwX21lbVtzYy0+bWFwX2lkICYgMV07Cisg ICAgbnVtX2xkcyA9IG1hcC0+cmFpZE1hcC5sZENvdW50OworICAgIAorICAgIGRjbWQgPSAmY21k LT5mcmFtZS0+ZGNtZDsKKyAgICBzaXplX3N5bmNfaW5mbyA9IHNpemVvZihNUl9MRF9UQVJHRVRf U1lOQykgKiBudW1fbGRzOworICAgIG1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJ WkUpOworCisgICAgdGFyZ2V0X21hcCA9IChNUl9MRF9UQVJHRVRfU1lOQyAqKXNjLT5yYWlkbWFw X21lbVsoc2MtPm1hcF9pZCAtIDEpICYgMV07CisgICAgbWVtc2V0KHRhcmdldF9tYXAsIDAsIHNp emVvZihNUl9GV19SQUlEX01BUF9BTEwpKTsKKworICAgIG1hcF9waHlzX2FkZHIgPSBzYy0+cmFp ZG1hcF9waHlzX2FkZHJbKHNjLT5tYXBfaWQgLSAxKSAmIDFdOworCisgICAgbGRfc3luYyA9IChN Ul9MRF9UQVJHRVRfU1lOQyAqKXRhcmdldF9tYXA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVt X2xkczsgaSsrLCBsZF9zeW5jKyspIHsKKyAgICAgICAgcmFpZCA9IE1SX0xkUmFpZEdldChpLCBt YXApOworICAgICAgICBsZF9zeW5jLT50YXJnZXRJZCA9IE1SX0dldExEVGd0SWQoaSwgbWFwKTsK KyAgICAgICAgbGRfc3luYy0+c2VxTnVtID0gcmFpZC0+c2VxTnVtOworICAgIH0KKworICAgIGRj bWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAg ICBkY21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9X UklURTsKKyAgICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAg ZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNjLT5tYXBfc3o7CisgICAgZGNtZC0+bWJveC5iWzBdID0g bnVtX2xkczsKKyAgICBkY21kLT5tYm94LmJbMV0gPSBNUlNBU19EQ01EX01CT1hfUEVORF9GTEFH OworICAgIGRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPOworICAgIGRjbWQt PnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBtYXBfcGh5c19hZGRyOworICAgIGRjbWQtPnNnbC5z Z2UzMlswXS5sZW5ndGggPSBzYy0+bWFwX3N6OworCisgICAgc2MtPm1hcF91cGRhdGVfY21kID0g Y21kOworICAgIGlmIChtcnNhc19pc3N1ZV9kY21kKHNjLCBjbWQpKSB7CisgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZhaWwgdG8gc2VuZCBzeW5jIG1hcCBpbmZvIGNvbW1h bmQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICByZXR1cm4ocmV0Y29kZSk7 Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3BkX2xpc3Q6ICAgICAgICAgICBSZXR1cm5zIEZXJ3Mg UEQgbGlzdCBzdHJ1Y3R1cmUKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRv IGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5m b3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgYWJvdXQgCisgKiBzeXN0ZW0gc3Vw cG9ydGVkIGJ5IEZpcm13YXJlLgorICovCitzdGF0aWMgaW50IG1yc2FzX2dldF9wZF9saXN0KHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaW50IHJldGNvZGUgPSAwLCBwZF9pbmRleCA9 IDAsIHBkX2NvdW50PTAsIHBkX2xpc3Rfc2l6ZTsKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAq Y21kOworICAgIHN0cnVjdCBtcnNhc19kY21kX2ZyYW1lICpkY21kOworICAgIHN0cnVjdCBNUl9Q RF9MSVNUICpwZF9saXN0X21lbTsKKyAgICBzdHJ1Y3QgTVJfUERfQUREUkVTUyAqcGRfYWRkcjsK KyAgICBidXNfYWRkcl90IHBkX2xpc3RfcGh5c19hZGRyID0gMDsKKyAgICBzdHJ1Y3QgbXJzYXNf dG1wX2RjbWQgKnRjbWQ7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisgICAg aWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90 IGFsbG9jIGZvciBnZXQgUEQgbGlzdCBjbWRcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisKKyAgICBkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKyAgICB0Y21kID0gbWFsbG9jKHNp emVvZihzdHJ1Y3QgbXJzYXNfdG1wX2RjbWQpLCBNX01SU0FTLCBNX05PV0FJVCk7CisgICAgcGRf bGlzdF9zaXplID0gTVJTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKyAg ICBpZiAobXJzYXNfYWxsb2NfdG1wX2RjbWQoc2MsIHRjbWQsIHBkX2xpc3Rfc2l6ZSkgIT0gU1VD Q0VTUykgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxs b2MgZG1hbWFwIGZvciBnZXQgUEQgbGlzdCBjbWRcbiIpOworICAgICAgICBtcnNhc19yZWxlYXNl X21maV9jbWQoY21kKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAgIGVsc2Ug eworICAgICAgICBwZF9saXN0X21lbSA9IHRjbWQtPnRtcF9kY21kX21lbTsKKyAgICAgICAgcGRf bGlzdF9waHlzX2FkZHIgPSB0Y21kLT50bXBfZGNtZF9waHlzX2FkZHI7CisgICAgfQorICAgIG1l bXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisgICAgZGNtZC0+bWJveC5i WzBdID0gTVJfUERfUVVFUllfVFlQRV9FWFBPU0VEX1RPX0hPU1Q7CisgICAgZGNtZC0+bWJveC5i WzFdID0gMDsKKyAgICBkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7CisgICAgZGNtZC0+Y21kX3N0 YXR1cyA9IDB4RkY7CisgICAgZGNtZC0+c2dlX2NvdW50ID0gMTsKKyAgICBkY21kLT5mbGFncyA9 IE1GSV9GUkFNRV9ESVJfUkVBRDsKKyAgICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5w YWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IE1SU0FTX01BWF9QRCAqIHNpemVv ZihzdHJ1Y3QgTVJfUERfTElTVCk7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9QRF9MSVNU X1FVRVJZOworICAgIGRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBwZF9saXN0X3BoeXNf YWRkcjsKKyAgICBkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gTVJTQVNfTUFYX1BEICogc2l6 ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKworICAgIGlmICghbXJzYXNfaXNzdWVfcG9sbGVkKHNj LCBjbWQpKSAKKyAgICAgICAgcmV0Y29kZSA9IDA7CisgICAgZWxzZSAKKyAgICAgICAgcmV0Y29k ZSA9IDE7CisKKyAgICAvKiBHZXQgdGhlIGluc3RhbmNlIFBEIGxpc3QgKi8KKyAgICBwZF9jb3Vu dCA9IE1SU0FTX01BWF9QRDsKKyAgICBwZF9hZGRyID0gcGRfbGlzdF9tZW0tPmFkZHI7CisgICAg aWYgKHJldGNvZGUgPT0gMCAmJiBwZF9saXN0X21lbS0+Y291bnQgPCBwZF9jb3VudCkgeworICAg ICAgICBtZW1zZXQoc2MtPnBkX2xpc3QsIDAsIE1SU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3Qg bXJzYXNfcGRfbGlzdCkpOworICAgICAgICBmb3IgKHBkX2luZGV4ID0gMDsgcGRfaW5kZXggPCBw ZF9saXN0X21lbS0+Y291bnQ7IHBkX2luZGV4KyspIHsKKyAgICAgICAgICAgIHNjLT5wZF9saXN0 W3BkX2FkZHItPmRldmljZUlkXS50aWQgPSBwZF9hZGRyLT5kZXZpY2VJZDsKKyAgICAgICAgICAg IHNjLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2ZVR5cGUgPSBwZF9hZGRyLT5zY3Np RGV2VHlwZTsKKyAgICAgICAgICAgIHNjLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2 ZVN0YXRlID0gTVJfUERfU1RBVEVfU1lTVEVNOworICAgICAgICAgICAgcGRfYWRkcisrOworICAg ICAgICB9CisgICAgfQorCisgICAgbXJzYXNfZnJlZV90bXBfZGNtZCh0Y21kKTsKKyAgICBtcnNh c19yZWxlYXNlX21maV9jbWQoY21kKTsKKyAgICBmcmVlKHRjbWQsIE1fTVJTQVMpOworICAgIHJl dHVybihyZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19nZXRfbGRfbGlzdDogICAgICAgICAg IFJldHVybnMgRlcncyBMRCBsaXN0IHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29t bWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgUEQKKyAqIGxpc3Qgc3RydWN0 dXJlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCBhYm91dAor ICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludCBtcnNhc19nZXRfbGRfbGlz dChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBsZF9saXN0X3NpemUsIHJldGNv ZGUgPSAwLCBsZF9pbmRleCA9IDAsIGlkcyA9IDA7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQg KmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKyAgICBzdHJ1Y3QgTVJf TERfTElTVCAqbGRfbGlzdF9tZW07CisgICAgYnVzX2FkZHJfdCBsZF9saXN0X3BoeXNfYWRkciA9 IDA7CisgICAgc3RydWN0IG1yc2FzX3RtcF9kY21kICp0Y21kOworCisgICAgY21kID0gbXJzYXNf Z2V0X21maV9jbWQoc2MpOworICAgIGlmICghY21kKSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBmb3IgZ2V0IExEIGxpc3QgY21kXG4iKTsKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwor CisgICAgdGNtZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1yc2FzX3RtcF9kY21kKSwgTV9NUlNB UywgTV9OT1dBSVQpOworICAgIGxkX2xpc3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElT VCk7CisgICAgaWYgKG1yc2FzX2FsbG9jX3RtcF9kY21kKHNjLCB0Y21kLCBsZF9saXN0X3NpemUp ICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fu bm90IGFsbG9jIGRtYW1hcCBmb3IgZ2V0IExEIGxpc3QgY21kXG4iKTsKKyAgICAgICAgbXJzYXNf cmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgICAgIHJldHVybihFTk9NRU0pOworICAgIH0KKyAg ICBlbHNlIHsKKyAgICAgICAgbGRfbGlzdF9tZW0gPSB0Y21kLT50bXBfZGNtZF9tZW07CisgICAg ICAgIGxkX2xpc3RfcGh5c19hZGRyID0gdGNtZC0+dG1wX2RjbWRfcGh5c19hZGRyOworICAgIH0K KyAgICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRjbWQt PmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAgICBk Y21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFE OworICAgIGRjbWQtPnRpbWVvdXQgPSAwOworICAgIGRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXpl b2Yoc3RydWN0IE1SX0xEX0xJU1QpOworICAgIGRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfR0VU X0xJU1Q7CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGxkX2xpc3RfcGh5c19h ZGRyOworICAgIGRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IE1SX0xE X0xJU1QpOworICAgIGRjbWQtPnBhZF8wICA9IDA7CisKKyAgICBpZiAoIW1yc2FzX2lzc3VlX3Bv bGxlZChzYywgY21kKSkgCisgICAgICAgIHJldGNvZGUgPSAwOworICAgIGVsc2UgCisgICAgICAg IHJldGNvZGUgPSAxOworCisgICAgIC8qIEdldCB0aGUgaW5zdGFuY2UgTEQgbGlzdCAqLyAKKyAg ICAgaWYgKChyZXRjb2RlID09IDApICYmIChsZF9saXN0X21lbS0+bGRDb3VudCA8PSAoTUFYX0xP R0lDQUxfRFJJVkVTKSkpeworICAgICAgICBzYy0+Q3VyTGRDb3VudCA9IGxkX2xpc3RfbWVtLT5s ZENvdW50OworICAgICAgICBtZW1zZXQoc2MtPmxkX2lkcywgMHhmZiwgTVJTQVNfTUFYX0xEKTsK KyAgICAgICAgZm9yIChsZF9pbmRleCA9IDA7IGxkX2luZGV4IDwgbGRfbGlzdF9tZW0tPmxkQ291 bnQ7IGxkX2luZGV4KyspIHsKKyAgICAgICAgICAgIGlmIChsZF9saXN0X21lbS0+bGRMaXN0W2xk X2luZGV4XS5zdGF0ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWRzID0gbGRfbGlzdF9tZW0t PmxkTGlzdFtsZF9pbmRleF0ucmVmLmxkX2NvbnRleHQudGFyZ2V0SWQ7CisgICAgICAgICAgICAg ICAgc2MtPmxkX2lkc1tpZHNdID0gbGRfbGlzdF9tZW0tPmxkTGlzdFtsZF9pbmRleF0ucmVmLmxk X2NvbnRleHQudGFyZ2V0SWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IAorCisg ICAgbXJzYXNfZnJlZV90bXBfZGNtZCh0Y21kKTsKKyAgICBtcnNhc19yZWxlYXNlX21maV9jbWQo Y21kKTsKKyAgICBmcmVlKHRjbWQsIE1fTVJTQVMpOworICAgIHJldHVybihyZXRjb2RlKTsKK30K KworLyoqCisgKiBtcnNhc19hbGxvY190bXBfZGNtZDogICAgICAgQWxsb2NhdGVzIG1lbW9yeSBm b3IgdGVtcG9yYXJ5IGNvbW1hbmQKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICBBZGFw dGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wIGNvbW1h bmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplIG9mIGFsbG9jdGlvbgorICoK KyAqIEFsbG9jYXRlcyBETUFhYmxlIG1lbW9yeSBmb3IgYSB0ZW1wb3JhcnkgaW50ZXJuYWwgY29t bWFuZC4gVGhlIGFsbG9jYXRlZAorICogbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJv cyB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgZG1hIAorICogbWFwcGVkIG1lbW9yeS4K KyAqLworaW50IG1yc2FzX2FsbG9jX3RtcF9kY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0 cnVjdCBtcnNhc190bXBfZGNtZCAqdGNtZCwgCisgICAgICAgICAgaW50IHNpemUpCit7CisgICAg aWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAgLy8g YWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0Vf TUFYQUREUl8zMkJJVCwvLyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVT X1NQQUNFX01BWEFERFIsICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemUsICAgICAgICAgICAgICAgICAgIC8vIG1heHNpemUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBt c2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCAgICAgICAgICAgICAg ICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9B TExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0Y21kLT50bXBfZGNtZF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSB0bXAgZGNtZCB0YWdcbiIpOworICAg ICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHRj bWQtPnRtcF9kY21kX3RhZywgKHZvaWQgKiopJnRjbWQtPnRtcF9kY21kX21lbSwKKyAgICAgICAg ICAgIEJVU19ETUFfTk9XQUlULCAmdGNtZC0+dG1wX2RjbWRfZG1hbWFwKSkgeworICAgICAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgdG1wIGRjbWQgbWVt XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1h cF9sb2FkKHRjbWQtPnRtcF9kY21kX3RhZywgdGNtZC0+dG1wX2RjbWRfZG1hbWFwLAorICAgICAg ICAgICAgdGNtZC0+dG1wX2RjbWRfbWVtLCBzaXplLCBtcnNhc19hZGRyX2NiLAorICAgICAgICAg ICAgJnRjbWQtPnRtcF9kY21kX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHRtcCBkY21kIG1lbVxu Iik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisKKyAgICBtZW1zZXQodGNtZC0+ dG1wX2RjbWRfbWVtLCAwLCBzaXplKTsKKyAgICByZXR1cm4gKDApOworfQorCisvKioKKyAqIG1y c2FzX2ZyZWVfdG1wX2RjbWQ6ICAgICAgRnJlZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBjb21tYW5k IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZGNtZCBwb2ludGVyIAor ICoKKyAqIERlYWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgdGVtcG9yYXJ5IGNvbW1hbmQgZm9yIHVz ZSBpbiB0aGUgY29uc3RydWN0aW9uCisgKiBvZiB0aGUgaW50ZXJuYWwgRENNRC4KKyAqLwordm9p ZCBtcnNhc19mcmVlX3RtcF9kY21kKHN0cnVjdCBtcnNhc190bXBfZGNtZCAqdG1wKQoreworICAg IGlmICh0bXAtPnRtcF9kY21kX3BoeXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQo dG1wLT50bXBfZGNtZF90YWcsIHRtcC0+dG1wX2RjbWRfZG1hbWFwKTsKKyAgICBpZiAodG1wLT50 bXBfZGNtZF9tZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHRtcC0+dG1wX2Rj bWRfdGFnLCB0bXAtPnRtcF9kY21kX21lbSwgdG1wLT50bXBfZGNtZF9kbWFtYXApOworICAgIGlm ICh0bXAtPnRtcF9kY21kX3RhZyAhPSBOVUxMKQorICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95 KHRtcC0+dG1wX2RjbWRfdGFnKTsKK30KKworLyoqCisgKiBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fi b3J0X2NtZDogICAgICAgQWJvcnRzIHByZXZpb3VzbHkgaXNzdWVkIGNtZAorICogaW5wdXQ6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHkgaXNzdWVkIGNtZCB0byBi ZSBhYm9ydGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFib3J0IHByZXZpb3Vz bHkgaXNzdWVkIGNvbW1hbmRzLCBzdWNoIGFzIEFFTiBhbmQgCisgKiBSQUlEIG1hcCBzeW5jIG1h cCBjb21tYW5kcy4gIFRoZSBhYm9ydCBjb21tYW5kIGlzIHNlbnQgYXMgYSBEQ01EIGludGVybmFs IAorICogY29tbWFuZCBhbmQgc3Vic2VxdWVudGx5IHRoZSBkcml2ZXIgd2lsbCB3YWl0IGZvciBh IHJldHVybiBzdGF0dXMuICBUaGUgCisgKiBtYXggd2FpdCB0aW1lIGlzIE1SU0FTX0lOVEVSTkFM X0NNRF9XQUlUX1RJTUUgc2Vjb25kcy4gCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfaXNzdWVfYmxv Y2tlZF9hYm9ydF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZF90b19hYm9y dCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kOworICAgIHN0cnVjdCBtcnNhc19h Ym9ydF9mcmFtZSAqYWJvcnRfZnI7CisgICAgdV9pbnQ4X3QgcmV0Y29kZSA9IDA7CisgICAgdW5z aWduZWQgbG9uZyB0b3RhbF90aW1lID0gMDsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9IE1SU0FT X0lOVEVSTkFMX0NNRF9XQUlUX1RJTUU7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChz Yyk7CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiQ2Fubm90IGFsbG9jIGZvciBhYm9ydCBjbWRcbiIpOworICAgICAgICByZXR1cm4oMSk7Cisg ICAgfQorCisgICAgYWJvcnRfZnIgPSAmY21kLT5mcmFtZS0+YWJvcnQ7CisKKyAgICAvKiBQcmVw YXJlIGFuZCBpc3N1ZSB0aGUgYWJvcnQgZnJhbWUgKi8KKyAgICBhYm9ydF9mci0+Y21kID0gTUZJ X0NNRF9BQk9SVDsKKyAgICBhYm9ydF9mci0+Y21kX3N0YXR1cyA9IDB4RkY7CisgICAgYWJvcnRf ZnItPmZsYWdzID0gMDsKKyAgICBhYm9ydF9mci0+YWJvcnRfY29udGV4dCA9IGNtZF90b19hYm9y dC0+aW5kZXg7CisgICAgYWJvcnRfZnItPmFib3J0X21maV9waHlzX2FkZHJfbG8gPSBjbWRfdG9f YWJvcnQtPmZyYW1lX3BoeXNfYWRkcjsKKyAgICBhYm9ydF9mci0+YWJvcnRfbWZpX3BoeXNfYWRk cl9oaSA9IDA7CisKKyAgICBjbWQtPnN5bmNfY21kID0gMTsKKyAgICBjbWQtPmNtZF9zdGF0dXMg PSAweEZGOworCisgICAgaWYgKG1yc2FzX2lzc3VlX2RjbWQoc2MsIGNtZCkpIHsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRmFpbCB0byBzZW5kIGFib3J0IGNvbW1hbmQu XG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIHRoaXMg Y21kIHRvIGNvbXBsZXRlICovCisgICAgc2MtPmNoYW4gPSAodm9pZCopJmNtZDsKKyAgICB3aGls ZSAoMSkgeworICAgICAgIGlmIChjbWQtPmNtZF9zdGF0dXMgPT0gMHhGRil7CisgICAgICAgICAg IHRzbGVlcCgodm9pZCAqKSZzYy0+Y2hhbiwgMCwgIm1yc2FzX3NsZWVwIiwgaHopOworICAgICAg IH0KKyAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgICAgIHRvdGFsX3RpbWUrKzsK KyAgICAgICBpZiAodG90YWxfdGltZSA+PSBtYXhfd2FpdCkgeworICAgICAgICAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJBYm9ydCBjbWQgdGltZWQgb3V0IGFmdGVyICVkIHNlYy5c biIsIG1heF93YWl0KTsKKyAgICAgICAgICAgcmV0Y29kZSA9IDE7CisgICAgICAgICAgIGJyZWFr OworICAgICAgIH0gCisgICAgfQorCisgICAgY21kLT5zeW5jX2NtZCA9IDA7CisgICAgbXJzYXNf cmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioKKyAq IG1yc2FzX2NvbXBsZXRlX2Fib3J0OiAgICAgIENvbXBsZXRlcyBhYm9ydGluZyBhIGNvbW1hbmQK KyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ21kIHRoYXQgd2FzIGlzc3VlZCB0byBhYm9ydCBhbm90 aGVyIGNtZAorICoKKyAqIFRoZSBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZCgpIGZ1bmN0 aW9uIHdhaXRzIGZvciB0aGUgY29tbWFuZCBzdGF0dXMKKyAqIHRvIGNoYW5nZSBhZnRlciBzZW5k aW5nIHRoZSBjb21tYW5kLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSAKKyAqIG1yc2Fz X2NvbXBsZXRlX21wdG1maV9wYXNzdGhydSgpIHRvIHdha2UgdXAgdGhlIHNsZWVwIHRocmVhZCBh c3NvY2lhdGVkLgorICovCit2b2lkIG1yc2FzX2NvbXBsZXRlX2Fib3J0KHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgaWYgKGNtZC0+c3lu Y19jbWQpIHsKKyAgICAgICAgY21kLT5zeW5jX2NtZCA9IDA7CisgICAgICAgIGNtZC0+Y21kX3N0 YXR1cyA9IDA7CisgICAgICAgIHNjLT5jaGFuID0gKHZvaWQqKSZjbWQ7CisgICAgICAgIHdha2V1 cF9vbmUoKHZvaWQgKikmc2MtPmNoYW4pOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKy8qKgor ICogbXJzYXNfYWVuX2hhbmRsZXI6CQlDYWxsYmFjayBmdW5jdGlvbiBmb3IgQUVOIHByb2Nlc3Np bmcgZnJvbSB0aHJlYWQgY29udGV4dC4KKyAqIGlucHV0OgkJCQkJQWRhcHRlciBzb2Z0IHN0YXRl CisgKgorICovCit2b2lkIG1yc2FzX2Flbl9oYW5kbGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Mp Cit7CisJdW5pb24gbXJzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjbGFzc19sb2NhbGU7CisJaW50ICAg ICBkb3NjYW4gPSAwOworCXVfaW50MzJfdCBzZXFfbnVtOworCWludCBlcnJvcjsKKworCWlmICgh c2MpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiaW52YWxpZCBpbnN0YW5jZSFc biIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNjLT5ldnRfZGV0YWlsX21lbSkgeworICAgICAg ICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJTQVNfQUVOLCAiTFNJIERlYnVnOiBFdmVudCBk ZXRhaWwgY29kZS0gJXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzYy0+ZXZ0X2RldGFp bF9tZW0tPmNvZGUpOworCQlzd2l0Y2ggKHNjLT5ldnRfZGV0YWlsX21lbS0+Y29kZSkgeworCQkJ Y2FzZSBNUl9FVlRfUERfSU5TRVJURUQ6CisJCQkJbXJzYXNfZ2V0X3BkX2xpc3Qoc2MpOworCQkJ CW1yc2FzX2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8xKTsKKwkJCQlkb3NjYW4gPSAwOworCQkJ CWJyZWFrOworCQkJY2FzZSBNUl9FVlRfUERfUkVNT1ZFRDoKKwkJCQltcnNhc19nZXRfcGRfbGlz dChzYyk7CisJCQkJbXJzYXNfYnVzX3NjYW5fc2ltKHNjLCBzYy0+c2ltXzEpOworCQkJCWRvc2Nh biA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIE1SX0VWVF9MRF9PRkZMSU5FOgorCQkJY2FzZSBN Ul9FVlRfQ0ZHX0NMRUFSRUQ6CisJCQljYXNlIE1SX0VWVF9MRF9ERUxFVEVEOgorCQkJCW1yc2Fz X2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8wKTsKKwkJCQlkb3NjYW4gPSAwOworCQkJCWJyZWFr OwkJCisJCQljYXNlIE1SX0VWVF9MRF9DUkVBVEVEOgorCQkJCW1yc2FzX2dldF9sZF9saXN0KHNj KTsKKwkJCQltcnNhc19idXNfc2Nhbl9zaW0oc2MsIHNjLT5zaW1fMCk7CisJCQkJZG9zY2FuID0g MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTVJfRVZUX0NUUkxfSE9TVF9CVVNfU0NBTl9SRVFVRVNU RUQ6CisJCQljYXNlIE1SX0VWVF9GT1JFSUdOX0NGR19JTVBPUlRFRDogCisJCQljYXNlIE1SX0VW VF9MRF9TVEFURV9DSEFOR0U6CisJCQkJZG9zY2FuID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZG9zY2FuID0gMDsKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgImludmFsaWQgZXZ0X2RldGFpbFxuIik7CisJCXJldHVy bjsKKwl9CisJaWYgKGRvc2NhbikgeworCQltcnNhc19nZXRfcGRfbGlzdChzYyk7CisgICAgICAg IG1yc2FzX2RwcmludChzYywgTVJTQVNfQUVOLCAic2Nhbm5pbmcgLi4uc2ltIDFcbiIpOworCQlt cnNhc19idXNfc2Nhbl9zaW0oc2MsIHNjLT5zaW1fMSk7CisJCW1yc2FzX2dldF9sZF9saXN0KHNj KTsKKwkJbXJzYXNfZHByaW50KHNjLCBNUlNBU19BRU4sICJzY2FubmluZyAuLi5zaW0gMFxuIik7 CisJCW1yc2FzX2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8wKTsKKwl9CisKKwlzZXFfbnVtID0g c2MtPmV2dF9kZXRhaWxfbWVtLT5zZXFfbnVtICsgMTsKKworCS8vIFJlZ2lzdGVyIEFFTiB3aXRo IEZXIGZvciBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIHBsdXMgMQorCWNsYXNzX2xvY2FsZS5tZW1i ZXJzLnJlc2VydmVkID0gMDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5sb2NhbGUgPSBNUl9FVlRf TE9DQUxFX0FMTDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5jbGFzcyA9IE1SX0VWVF9DTEFTU19E RUJVRzsKKwkKKwlpZiAoc2MtPmFlbl9jbWQgIT0gTlVMTCApCisJCXJldHVybiA7IAorCisJbXR4 X2xvY2soJnNjLT5hZW5fbG9jayk7CisJZXJyb3IgPSBtcnNhc19yZWdpc3Rlcl9hZW4oc2MsIHNl cV9udW0sCisJCQkJCWNsYXNzX2xvY2FsZS53b3JkKTsKKwltdHhfdW5sb2NrKCZzYy0+YWVuX2xv Y2spOworCisJaWYgKGVycm9yKQorCQlkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJyZWdp c3RlciBhZW4gZmFpbGVkIGVycm9yICV4XG4iLCBlcnJvcik7CisKK30KKworCisvKioKKyAqIG1y c2FzX2NvbXBsZXRlX2FlbjogICAgICAgIAlDb21wbGV0ZXMgQUVOIGNvbW1hbmQKKyAqIGlucHV0 OiAgICAgICAgICAgICAgICAgICAgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAlDbWQgdGhhdCB3YXMgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21k CisgKgorICogCQkJCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSBJU1IgYW5kIHdp bGwgY29udGludWUgCisgKiAJCQkJZXZlbnQgcHJvY2Vzc2luZyBmcm9tIHRocmVhZCBjb250ZXh0 IGJ5IGVucXVldWluZyB0YXNrCisgKiAJCQkJaW4gZXZfdHEgKGNhbGxiYWNrIGZ1bmN0aW9uICJt cnNhc19hZW5faGFuZGxlciIpLgorICovCit2b2lkIG1yc2FzX2NvbXBsZXRlX2FlbihzdHJ1Y3Qg bXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworCS8qCisJKiBE b24ndCBzaWduYWwgYXBwIGlmIGl0IGlzIGp1c3QgYW4gYWJvcnRlZCBwcmV2aW91c2x5IHJlZ2lz dGVyZWQgYWVuCisJKi8KKwlpZiAoKCFjbWQtPmFib3J0X2FlbikgJiYgKHNjLT5yZW1vdmVfaW5f cHJvZ3Jlc3MgPT0gMCkpIHsKKwkJLyogVE8gRE8gKD8pICovCisJfQorCWVsc2UKKwkJY21kLT5h Ym9ydF9hZW4gPSAwOworCisJc2MtPmFlbl9jbWQgPSBOVUxMOworCW1yc2FzX3JlbGVhc2VfbWZp X2NtZChjbWQpOworCisJaWYgKCFzYy0+cmVtb3ZlX2luX3Byb2dyZXNzKQorCQl0YXNrcXVldWVf ZW5xdWV1ZShzYy0+ZXZfdHEsICZzYy0+ZXZfdGFzayk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRp YyBkZXZpY2VfbWV0aG9kX3QgbXJzYXNfbWV0aG9kc1tdID0geworICAgIERFVk1FVEhPRChkZXZp Y2VfcHJvYmUsICAgICBtcnNhc19wcm9iZSksCisgICAgREVWTUVUSE9EKGRldmljZV9hdHRhY2gs ICAgIG1yc2FzX2F0dGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9kZXRhY2gsICAgIG1yc2Fz X2RldGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCAgIG1yc2FzX3N1c3BlbmQp LAorICAgIERFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCAgICBtcnNhc19yZXN1bWUpLAorICAgIERF Vk1FVEhPRChidXNfcHJpbnRfY2hpbGQsICBidXNfZ2VuZXJpY19wcmludF9jaGlsZCksCisgICAg REVWTUVUSE9EKGJ1c19kcml2ZXJfYWRkZWQsIGJ1c19nZW5lcmljX2RyaXZlcl9hZGRlZCksCisg ICAgeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBtcnNhc19kcml2ZXIgPSB7CisgICAg Im1yc2FzIiwKKyAgICBtcnNhc19tZXRob2RzLAorICAgIHNpemVvZihzdHJ1Y3QgbXJzYXNfc29m dGMpCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCAgICAgICBtcnNhc19kZXZjbGFzczsKK0RSSVZF Ul9NT0RVTEUobXJzYXMsIHBjaSwgbXJzYXNfZHJpdmVyLCBtcnNhc19kZXZjbGFzcywgMCwgMCk7 CitNT0RVTEVfREVQRU5EKG1yc2FzLCBjYW0sIDEsMSwxKTsKKwpJbmRleDogc3lzL2Rldi9tcnNh cy9tcnNhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvbXJzYXMvbXJzYXMuaAkocmV2aXNpb24g MCkKKysrIHN5cy9kZXYvbXJzYXMvbXJzYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIz MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIExTSSBDb3JwLgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTWFyaWFuIENob3kKKyAqIE1vZGlmaWVkIGJ5IERlc2Fp IEthc2h5YXAgKGthc2h5YXAuZGVzYWlAbHNpLmNvbSkKKyAqIE1vZGlmaWVkIGJ5IFNheGVuYSBT dW1pdCAoc3VtaXQuc2F4ZW5hQGxzaS5jb20pCisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2lmbmRlZiBNUlNBU19ICisjZGVmaW5lIE1SU0FTX0gKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5o PiAgICAgICAgLyogZGVmaW5lcyB1c2VkIGluIGtlcm5lbC5oICovCisjaW5jbHVkZSA8c3lzL21v ZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+Cisj aW5jbHVkZSA8c3lzL2Vycm5vLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPiAgICAgICAvKiB0 eXBlcyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLworI2luY2x1ZGUgPHN5cy9jb25m Lmg+ICAgICAgICAgLyogY2RldnN3IHN0cnVjdCAqLworI2luY2x1ZGUgPHN5cy91aW8uaD4gICAg ICAgICAgLyogdWlvIHN0cnVjdCAqLworI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRl IDxzeXMvYnVzLmg+ICAgICAgICAgIC8qIHN0cnVjdHMsIHByb3RvdHlwZXMgZm9yIHBjaSBidXMg c3R1ZmYgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4u aD4KKyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hdG9t aWMuaD4KKworI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+ICAgLyogRm9yIHBjaV9nZXQgbWFj cm9zISAqLworI2luY2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp bmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRl IDxzeXMvc2VsaW5mby5oPgorCisvKgorICogRGV2aWNlIElEcyBhbmQgUENJCisgKi8KKyNkZWZp bmUgTVJTQVNfVEJPTFQgICAgICAgICAgMHgwMDViCisjZGVmaW5lIE1SU0FTX0lOVkFERVIgICAg ICAgIDB4MDA1ZCAKKyNkZWZpbmUgTVJTQVNfUENJX0JBUjAgICAgICAgMHgxMAorI2RlZmluZSBN UlNBU19QQ0lfQkFSMSAgICAgICAweDE0CisjZGVmaW5lIE1SU0FTX1BDSV9CQVIyICAgICAgIDB4 MUMKKworLyoKKyAqIEZpcm13YXJlIFN0YXRlIERlZmluZXMgCisgKi8KKyNkZWZpbmUgTVJTQVNf RldTVEFURV9NQVhDTURfTUFTSyAgICAweDAwMDBGRkZGIAorI2RlZmluZSBNUlNBU19GV1NUQVRF X1NHRV9NQVNLICAgICAgIDB4MDBGRjAwMDAgCisjZGVmaW5lIE1SU0FTX0ZXX1NUQVRFX0NITkdf SU5URVJSVVBUIDEgCisKKy8qCisgKiBNZXNzYWdlIEZyYW1lIERlZmluZXMKKyAqLworI2RlZmlu ZSBNUlNBU19TRU5TRV9MRU4gICA5NiAKKyNkZWZpbmUgTVJTQVNfRlVTSU9OX01BWF9SRVNFVF9U UklFUyAgICAgICAgICAgICAgICAzCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIERlZmluZXMgCisg Ki8KKyNkZWZpbmUgQllURV9BTElHTk1FTlQgICAgICAgIDEgCisjZGVmaW5lIE1SU0FTX01BWF9O QU1FX0xFTkdUSCAzMiAgCisjZGVmaW5lIE1SU0FTX1ZFUlNJT04gIjUuNTA3LjAyLjAwLWZic2Qi ICAgICAgICAKKyNkZWZpbmUgTVJTQVNfVUxPTkdfTUFYICAgICAweEZGRkZGRkZGRkZGRkZGRkYK KyNkZWZpbmUgTVJTQVNfREVGQVVMVF9USU1FT1VUIDB4MTQgLy90ZW1wIAorI2RlZmluZSBET05F IDAKKyNkZWZpbmUgTVJTQVNfUEFHRV9TSVpFICAgICAgIDQwOTYKKyNkZWZpbmUgTVJTQVNfUkVT RVRfTk9USUNFX0lOVEVSVkFMIDUKKyNkZWZpbmUgTVJTQVNfSU9fVElNRU9VVCAxODAwMDAgICAg ICAvKiAxODAgc2Vjb25kIHRpbWVvdXQgKi8KKyNkZWZpbmUgTVJTQVNfTERJT19RVUVVRV9ERVBU SCAgIDcwICAvKiA3MCBwZXJjZW50IGFzIGRlZmF1bHQgKi8KKworLyogCisgQm9vbGVhbiB0eXBl cyAKKyovCitlbnVtIGVyciB7IFNVQ0NFU1MsIEZBSUwgfTsKKworTUFMTE9DX0RFQ0xBUkUoTV9N UlNBUyk7CitTWVNDVExfREVDTChfaHdfbXJzYXMpOworCisjZGVmaW5lIE1SU0FTX0lORk8gICAg ICAoMSA8PCAwKQorI2RlZmluZSBNUlNBU19UUkFDRSAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTVJT QVNfRkFVTFQgICAgICgxIDw8IDIpCisjZGVmaW5lIE1SU0FTX09DUiAgICAgICAgICAgICAgICgx IDw8IDMpCisjZGVmaW5lIE1SU0FTX1RPVVQgICAgICBNUlNBU19PQ1IKKyNkZWZpbmUgTVJTQVNf QUVOICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgbXJzYXNfZHByaW50KHNjLCBsZXZlbCwgbXNn LCBhcmdzLi4uKSAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGlmIChzYy0+bXJzYXNfZGVidWcgJiBsZXZlbCkgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCBtc2cs ICMjYXJncyk7ICBcCit9IHdoaWxlICgwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBS YWlkIENvbnRleHQgc3RydWN0dXJlIHdoaWNoIGRlc2NyaWJlcyBNZWdhUkFJRCBzcGVjaWZpYyBJ TyBQYXJhbWVudGVycworICogVGhpcyByZXNpZGVzIGF0IG9mZnNldCAweDYwIHdoZXJlIHRoZSBT R0wgbm9ybWFsbHkgc3RhcnRzIGluIE1QVCBJTyBGcmFtZXMKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCit0eXBlZGVmIHN0cnVjdCBfUkFJRF9DT05URVhUIHsKKyAgICB1X2ludDhfdCAgICAgIFR5 cGU6NDsgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50OF90ICAgICAgbnNlZzo0OyAgICAg ICAgICAgICAvLyAweDAwCisgICAgdV9pbnQ4X3QgICAgICByZXN2ZDA7ICAgICAgICAgICAgIC8v IDB4MDEKKyAgICB1X2ludDE2X3QgICAgIHRpbWVvdXRWYWx1ZTsgICAgICAgLy8gMHgwMiAtMHgw MworICAgIHVfaW50OF90ICAgICAgcmVnTG9ja0ZsYWdzOyAgICAgICAvLyAweDA0CisgICAgdV9p bnQ4X3QgICAgICByZXN2ZDE7ICAgICAgICAgICAgIC8vIDB4MDUKKyAgICB1X2ludDE2X3QgICAg IFZpcnR1YWxEaXNrVGd0SWQ7ICAgLy8gMHgwNiAtMHgwNworICAgIHVfaW50NjRfdCAgICAgcmVn TG9ja1Jvd0xCQTsgICAgICAvLyAweDA4IC0gMHgwRgorICAgIHVfaW50MzJfdCAgICAgcmVnTG9j a0xlbmd0aDsgICAgICAvLyAweDEwIC0gMHgxMworICAgIHVfaW50MTZfdCAgICAgbmV4dExNSWQ7 ICAgICAgICAgICAvLyAweDE0IC0gMHgxNQorICAgIHVfaW50OF90ICAgICAgZXhTdGF0dXM7ICAg ICAgICAgICAvLyAweDE2CisgICAgdV9pbnQ4X3QgICAgICBzdGF0dXM7ICAgICAgICAgICAgIC8v IDB4MTcgc3RhdHVzCisgICAgdV9pbnQ4X3QgICAgICBSQUlERmxhZ3M7ICAvLyAweDE4IHJlc3Zk Wzc6Nl0saW9TdWJUeXBlWzU6NF0scmVzdmRbMzoxXSxwcmVmZXJyZWRDcHVbMF0KKyAgICB1X2lu dDhfdCAgICAgIG51bVNHRTsgICAgICAgIC8vIDB4MTkgbnVtU2dlOyBub3QgaW5jbHVkaW5nIGNo YWluIGVudHJpZXMgCisgICAgdV9pbnQxNl90ICAgICBjb25maWdTZXFOdW07ICAgLy8gMHgxQSAt MHgxQgorICAgIHVfaW50OF90ICAgICAgc3BhbkFybTsgICAgICAgICAgICAvLyAweDFDIHNwYW5b Nzo1XSwgYXJtWzQ6MF0gCisgICAgdV9pbnQ4X3QgICAgICByZXN2ZDJbM107ICAgICAgICAgIC8v IDB4MUQtMHgxZiAKK30gUkFJRF9DT05URVhUOworCisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBN UEkyIERlZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9J T0NfSU5JVCAgICAgICAgICAgICAgKDB4MDIpIC8qIElPQyBJbml0ICovCisjZGVmaW5lIE1QSTJf V0hPSU5JVF9IT1NUX0RSSVZFUiAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1ZFUlNJ T05fTUFKT1IgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01J Tk9SICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9N QVNLICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9TSElG VCAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfTUFTSyAgICAgICAg ICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICAgICAg ICAoMCkKKyNkZWZpbmUgTVBJMl9WRVJTSU9OICgoTVBJMl9WRVJTSU9OX01BSk9SIDw8IE1QSTJf VkVSU0lPTl9NQUpPUl9TSElGVCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgTVBJMl9WRVJT SU9OX01JTk9SKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAo MHgxMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDAp CisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCisj ZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQorI2RlZmluZSBN UEkyX0hFQURFUl9WRVJTSU9OX0RFVl9NQVNLICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEky X0hFQURFUl9WRVJTSU9OX0RFVl9TSElGVCAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJf VkVSU0lPTiAoKE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCA8PCA4KSB8IE1QSTJfSEVBREVSX1ZF UlNJT05fREVWKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERSICAg ICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfUFJJX1JFRlRBRyAg ICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVGVEFHICAg ICAgKDB4MDQwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9P UCAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19BUFBUQUcg ICAgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfR1VBUkQg ICAgICAgKDB4MDEwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOU0VSVF9PUCAg ICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUICAg ICAgICAgICAoMHgwMCkgLyogU0NTSSBJTyAqLworI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9G TEFHU19ISUdIX1BSSU9SSVRZICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZM QUdTX1NDU0lfSU8gICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfNjRfQklU X0FERFJFU1NJTkcgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1dS SVRFICAgICAgICAgICAgICAgKDB4MDEwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRS T0xfUkVBRCAgICAgICAgICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SRVFfREVT Q1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX1JQWV9ERVND UklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NS SVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJ UFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1dSU0VRX0ZMVVNI X0tFWV9WQUxVRSAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTVBJMl9XUklURV9TRVFVRU5D RV9PRkZTRVQgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1dSU0VRXzFT VF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4RikKKyNkZWZpbmUgTVBJMl9XUlNFUV8yTkRf S0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweDQpCisjZGVmaW5lIE1QSTJfV1JTRVFfM1JEX0tF WV9WQUxVRSAgICAgICAgICAgICAgICAoMHhCKQorI2RlZmluZSBNUEkyX1dSU0VRXzRUSF9LRVlf VkFMVUUgICAgICAgICAgICAgICAgKDB4MikKKyNkZWZpbmUgTVBJMl9XUlNFUV81VEhfS0VZX1ZB TFVFICAgICAgICAgICAgICAgICgweDcpCisjZGVmaW5lIE1QSTJfV1JTRVFfNlRIX0tFWV9WQUxV RSAgICAgICAgICAgICAgICAoMHhEKQorCisjaWZuZGVmIE1QSTJfUE9JTlRFUgorI2RlZmluZSBN UEkyX1BPSU5URVIgICAgICoKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIE1QSTIgU3RydWN0dXJlcworICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTI1X0lFRUVfU0dFX0NI QUlONjQKK3sKKyAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICB1X2ludDE2X3QgICAg ICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgTmV4dENoYWluT2Zmc2V0OworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IEZsYWdzOworfSBNUEkyNV9JRUVFX1NHRV9DSEFJTjY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTI1 X0lFRUVfU0dFX0NIQUlONjQsCisgICAgTXBpMjVJZWVlU2dlQ2hhaW42NF90LCBNUEkyX1BPSU5U RVIgcE1waTI1SWVlZVNnZUNoYWluNjRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1NJ TVBMRV9VTklPTgoreworICAgIHVfaW50MzJfdCAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworICAg IHVuaW9uCisgICAgeworICAgICAgICB1X2ludDMyX3QgICAgICAgIEFkZHJlc3MzMjsKKyAgICAg ICAgdV9pbnQ2NF90ICAgICAgICBBZGRyZXNzNjQ7CisgICAgfSB1OworfSBNUEkyX1NHRV9TSU1Q TEVfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfU0lNUExFX1VOSU9OLAorICAgIE1w aTJTR0VTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VTaW1wbGVVbmlvbl90Owor Cit0eXBlZGVmIHN0cnVjdAoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENE QlsyMF07ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgdV9pbnQzMl90ICAgICAg ICAgICAgICAgICAgICAgUHJpbWFyeVJlZmVyZW5jZVRhZzsgICAgICAgIC8qIDB4MTQgKi8KKyAg ICB1X2ludDE2X3QgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWc7ICAg ICAgLyogMHgxOCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlB cHBsaWNhdGlvblRhZ01hc2s7ICAvKiAweDFBICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAg ICAgICAgICAgVHJhbnNmZXJMZW5ndGg7ICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9T Q1NJX0lPX0NEQl9FRURQMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX0NEQl9FRURQ MzIsCisgICAgTXBpMlNjc2lJb0NkYkVlZHAzMl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9D ZGJFZWRwMzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX0NIQUlOX1VOSU9OCit7Cisg ICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworICAgIHVfaW50OF90ICAg ICAgICAgICAgICAgICAgICAgIE5leHRDaGFpbk9mZnNldDsKKyAgICB1X2ludDhfdCAgICAgICAg ICAgICAgICAgICAgICBGbGFnczsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdV9pbnQzMl90 ICAgICAgICAgICAgICAgICBBZGRyZXNzMzI7CisgICAgICAgIHVfaW50NjRfdCAgICAgICAgICAg ICAgICAgQWRkcmVzczY0OworICAgIH0gdTsKK30gTVBJMl9TR0VfQ0hBSU5fVU5JT04sIE1QSTJf UE9JTlRFUiBQVFJfTVBJMl9TR0VfQ0hBSU5fVU5JT04sCisgICAgTXBpMlNHRUNoYWluVW5pb25f dCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFQ2hhaW5Vbmlvbl90OworCit0eXBlZGVmIHN0cnVjdCBf TVBJMl9JRUVFX1NHRV9TSU1QTEUzMgoreworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3M7CisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5n dGg7Cit9IE1QSTJfSUVFRV9TR0VfU0lNUExFMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVF X1NHRV9TSU1QTEUzMiwKKyAgICBNcGkySWVlZVNnZVNpbXBsZTMyX3QsIE1QSTJfUE9JTlRFUiBw TXBpMkllZWVTZ2VTaW1wbGUzMl90OwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSUVFRV9TR0VfU0lN UExFNjQKK3sKKyAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICB1X2ludDE2X3QgICAg ICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgUmVzZXJ2ZWQyOworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIEZsYWdz OworfSBNUEkyX0lFRUVfU0dFX1NJTVBMRTY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9T R0VfU0lNUExFNjQsCisgICAgTXBpMkllZWVTZ2VTaW1wbGU2NF90LCBNUEkyX1BPSU5URVIgcE1w aTJJZWVlU2dlU2ltcGxlNjRfdDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9JRUVFX1NHRV9TSU1Q TEVfVU5JT04KK3sKKyAgICBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBTaW1wbGUzMjsKKyAgICBN UEkyX0lFRUVfU0dFX1NJTVBMRTY0ICBTaW1wbGU2NDsKK30gTVBJMl9JRUVFX1NHRV9TSU1QTEVf VU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVFX1NHRV9TSU1QTEVfVU5JT04sCisgICAg TXBpMkllZWVTZ2VTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlU2ltcGxl VW5pb25fdDsKKwordHlwZWRlZiBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBNUEkyX0lFRUVfU0dF X0NIQUlOMzI7Cit0eXBlZGVmIE1QSTJfSUVFRV9TR0VfU0lNUExFNjQgIE1QSTJfSUVFRV9TR0Vf Q0hBSU42NDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTgorewor ICAgIE1QSTJfSUVFRV9TR0VfQ0hBSU4zMiAgIENoYWluMzI7CisgICAgTVBJMl9JRUVFX1NHRV9D SEFJTjY0ICAgQ2hhaW42NDsKK30gTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTiwgTVBJMl9QT0lO VEVSIFBUUl9NUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OLAorICAgIE1waTJJZWVlU2dlQ2hhaW5V bmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlQ2hhaW5Vbmlvbl90OworCit0eXBlZGVm IHVuaW9uIF9NUEkyX1NHRV9JT19VTklPTgoreworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAg ICAgICBNcGlTaW1wbGU7CisgICAgTVBJMl9TR0VfQ0hBSU5fVU5JT04gICAgICAgIE1waUNoYWlu OworICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OICBJZWVlU2ltcGxlOworICAgIE1QSTJf SUVFRV9TR0VfQ0hBSU5fVU5JT04gICBJZWVlQ2hhaW47Cit9IE1QSTJfU0dFX0lPX1VOSU9OLCBN UEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX0lPX1VOSU9OLAorICAgIE1waTJTR0VJT1VuaW9uX3Qs IE1QSTJfUE9JTlRFUiBwTXBpMlNHRUlPVW5pb25fdDsKKwordHlwZWRlZiB1bmlvbgoreworICAg IHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENEQjMyWzMyXTsKKyAgICBNUEkyX1NDU0lf SU9fQ0RCX0VFRFAzMiBFRURQMzI7CisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dFOwor fSBNUEkyX1NDU0lfSU9fQ0RCX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19D REJfVU5JT04sCisgICAgTXBpMlNjc2lJb0NkYl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9D ZGJfdDsKKworLyoKKyAqIFJBSUQgU0NTSSBJTyBSZXF1ZXN0IE1lc3NhZ2UKKyAqIFRvdGFsIFNH RSBjb3VudCB3aWxsIGJlIG9uZSBsZXNzIHRoYW4gIF9NUEkyX1NDU0lfSU9fUkVRVUVTVAorICov Cit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVAoreworICAgIHVfaW50 MTZfdCAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAg LyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0 OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAg ICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAg IHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAg ICAgICAgLyogMHgwNCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFJlc2Vy dmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIHVfaW50OF90ICAgICAg ICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAq LworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMHgwOCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIHVfaW50MTZf dCAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyog MHgwQSAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTG93 QWRkcmVzczsgICAgICAgICAgLyogMHgwQyAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAg ICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIHVf aW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTGVuZ3RoOyAgICAgICAgICAg ICAgLyogMHgxMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVk NDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMyAqLworICAgIHVfaW50OF90ICAgICAgICAg ICAgICAgICAgICAgIFNHTE9mZnNldDA7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwor ICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDE7ICAgICAgICAgICAg ICAgICAgICAgLyogMHgxNSAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNH TE9mZnNldDI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIHVfaW50OF90ICAg ICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgx NyAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNraXBDb3VudDsgICAgICAg ICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAg ICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIHVfaW50 MzJfdCAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxEYXRhTGVuZ3RoOyAgICAgICAg LyogMHgyMCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIElvRmxhZ3M7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAg ICAgICAgICAgIEVFRFBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNiAqLworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIEVFRFBCbG9ja1NpemU7ICAgICAgICAgICAg ICAgICAgLyogMHgyOCAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNlY29u ZGFyeVJlZmVyZW5jZVRhZzsgICAgICAgICAgLyogMHgyQyAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICAgICAgICAgIFNlY29uZGFyeUFwcGxpY2F0aW9uVGFnOyAgICAgICAgLyogMHgzMCAq LworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVGFnVHJhbnNs YXRpb25NYXNrOyAgLyogMHgzMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzNCAqLworICAgIHVfaW50MzJf dCAgICAgICAgICAgICAgICAgICAgIENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgICAgLyog MHgzQyAqLworICAgIE1QSTJfU0NTSV9JT19DREJfVU5JT04gIENEQjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMHg0MCAqLworICAgIFJBSURfQ09OVEVYVCAgICAgICAgICAgIFJhaWRD b250ZXh0OyAgICAgICAgICAgICAgICAgICAgLyogMHg2MCAqLworICAgIE1QSTJfU0dFX0lPX1VO SU9OICAgICAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg4MCAqLworfSBN UlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUlNBU19SQUlEX1ND U0lfSU9fUkVRVUVTVCwKKyAgICBNUlNBU1JhaWRTQ1NJSU9SZXF1ZXN0X3QsIE1QSTJfUE9JTlRF UiBwTVJTQVNSYWlkU0NTSUlPUmVxdWVzdF90OworCisvKgorICogTVBUIFJBSUQgTUZBIElPIERl c2NyaXB0b3IuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NUlNBU19SQUlEX01GQV9JT19ERVNDUklQ VE9SIHsKKyAgICB1X2ludDMyX3QgICAgIFJlcXVlc3RGbGFncyAgICA6IDg7CisgICAgdV9pbnQz Ml90ICAgICBNZXNzYWdlQWRkcmVzczEgOiAyNDsgLyogYml0cyAzMTo4Ki8KKyAgICB1X2ludDMy X3QgICAgIE1lc3NhZ2VBZGRyZXNzMjsgICAgICAvKiBiaXRzIDYxOjMyICovCit9IE1SU0FTX1JB SURfTUZBX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwqUE1SU0FTX1JBSURfTUZBX0lPX1JFUVVFU1Rf REVTQ1JJUFRPUjsKKworLyogRGVmYXVsdCBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYg c3RydWN0IF9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SCit7CisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAg dV9pbnQ4X3QgICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAx ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAg ICAvKiAweDAyICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAg ICAgICAgICAgICAvKiAweDA0ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIERlc2NyaXB0 b3JUeXBlRGVwZW5kZW50OyAgICAvKiAweDA2ICovCit9IE1QSTJfREVGQVVMVF9SRVFVRVNUX0RF U0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVND UklQVE9SLAorICAgIE1waTJEZWZhdWx0UmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVS IHBNcGkyRGVmYXVsdFJlcXVlc3REZXNjcmlwdG9yX3Q7CisgICAgCisvKiBIaWdoIFByaW9yaXR5 IFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSElHSF9QUklPUklU WV9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICB1X2ludDhfdCAgICAgICAgICAgICAgUmVxdWVz dEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICB1X2ludDhfdCAgICAgICAgICAg ICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICB1X2ludDE2X3Qg ICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICB1 X2ludDE2X3QgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQg Ki8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAg IC8qIDB4MDYgKi8KK30gTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAg ICBNUEkyX1BPSU5URVIgUFRSX01QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1Is CisgICAgTXBpMkhpZ2hQcmlvcml0eVJlcXVlc3REZXNjcmlwdG9yX3QsCisgICAgTVBJMl9QT0lO VEVSIHBNcGkySGlnaFByaW9yaXR5UmVxdWVzdERlc2NyaXB0b3JfdDsKKyAgICAKKy8qIFNDU0kg SU8gUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX0lPX1JF UVVFU1RfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICBSZXF1ZXN0Rmxh Z3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBN U0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50 MTZfdCAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwor ICAgIHVfaW50MTZfdCAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyog MHgwNiAqLworfSBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9J TlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSUlP UmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSUlPUmVxdWVzdERlc2Ny aXB0b3JfdDsKKworLyogU0NTSSBUYXJnZXQgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVm IHN0cnVjdCBfTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICB1X2lu dDhfdCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8K KyAgICB1X2ludDhfdCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8q IDB4MDEgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIDB4MDIgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgTE1JRDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgSW9J bmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9TQ1NJX1RBUkdFVF9S RVFVRVNUX0RFU0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFSR0VU X1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9y X3QsCisgICAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3Q7 CisKKy8qIFJBSUQgQWNjZWxlcmF0b3IgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0 cnVjdCBfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90 ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAg IHVfaW50OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgw MSAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAg ICAgLyogMHgwMiAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAg ICAgICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBSZXNlcnZl ZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1JBSURfQUNDRUxfUkVRVUVT VF9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMX1JFUVVF U1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyUkFJREFjY2VsZXJhdG9yUmVxdWVzdERlc2NyaXB0b3Jf dCwKKyAgICBNUEkyX1BPSU5URVIgcE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRv cl90OworCisvKiB1bmlvbiBvZiBSZXF1ZXN0IERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9u IF9NUlNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04KK3sKKyAgICBNUEkyX0RFRkFVTFRfUkVR VUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9ISUdIX1BSSU9S SVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICBIaWdoUHJpb3JpdHk7CisgICAgTVBJMl9TQ1NJ X0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBTQ1NJSU87CisgICAgTVBJMl9TQ1NJ X1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJVGFyZ2V0OworICAgIE1QSTJf UkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgUkFJREFjY2VsZXJhdG9yOwor ICAgIE1SU0FTX1JBSURfTUZBX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgTUZBSW87Cisg ICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQzMl90IGxvdzsK KyAgICAgICAgICAgIHVfaW50MzJfdCBoaWdoOworICAgICAgICB9IHU7CisgICAgICAgIHVfaW50 NjRfdCBXb3JkczsKKyAgICB9IGFkZHI7Cit9IE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklP TjsKKworLyogRGVmYXVsdCBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJ Ml9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IKK3sKKyAgICB1X2ludDhfdCAgICAgICAgICAgICAg UmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICB1X2ludDhfdCAgICAg ICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICB1X2lu dDE2X3QgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxOyAgIC8qIDB4MDIgKi8K KyAgICB1X2ludDMyX3QgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQyOyAgIC8q IDB4MDQgKi8KK30gTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQ VFJfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTXBpMkRlZmF1bHRSZXBseURl c2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90Owor CisvKiBBZGRyZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0FE RFJFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICBSZXBs eUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAg ICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIHVfaW50MTZf dCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAg IHVfaW50MzJfdCAgICAgICAgICAgICBSZXBseUZyYW1lQWRkcmVzczsgICAgICAgICAgLyogMHgw NCAqLworfSBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9N UEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyQWRkcmVzc1JlcGx5RGVzY3Jp cHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJBZGRyZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKy8q IFNDU0kgSU8gU3VjY2VzcyBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJ Ml9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAg ICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50 OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwor ICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyog MHgwMiAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAg ICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBSZXNlcnZlZDE7ICAg ICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9E RVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQ TFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LAor ICAgIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lJT1N1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdDsKKwor LyogVGFyZ2V0QXNzaXN0IFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1 Y3QgX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVf aW50OF90ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAq LworICAgIHVfaW50OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAg LyogMHgwMSAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAg ICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBTZXF1ZW5jZU51 bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBS ZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RB UkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBU Ul9NUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTXBpMlRh cmdldEFzc2lzdFN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgICBNUEkyX1BPSU5URVIgcE1w aTJUYXJnZXRBc3Npc3RTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKy8qIFRhcmdldCBDb21t YW5kIEJ1ZmZlciBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJH RVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAg ICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50 OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwor ICAgIHVfaW50OF90ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyog MHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAg ICAgICAgLyogMHgwMyAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBJbml0aWF0b3JEZXZI YW5kbGU7ICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBJb0lu ZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RBUkdFVF9DT01NQU5E X0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UQVJH RVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyVGFyZ2V0Q29tbWFu ZEJ1ZmZlclJlcGx5RGVzY3JpcHRvcl90LAorICAgIE1QSTJfUE9JTlRFUiBwTXBpMlRhcmdldENv bW1hbmRCdWZmZXJSZXBseURlc2NyaXB0b3JfdDsKKworLyogUkFJRCBBY2NlbGVyYXRvciBTdWNj ZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNDRUxF UkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCit7CisgICAgdV9pbnQ4X3QgICAgICAgICAg ICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAg dV9pbnQxNl90ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAy ICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAg ICAvKiAweDA0ICovCit9IE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NS SVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VT U19SRVBMWV9ERVNDUklQVE9SLAorICAgIE1waTJSQUlEQWNjZWxlcmF0b3JTdWNjZXNzUmVwbHlE ZXNjcmlwdG9yX3QsCisgICAgTVBJMl9QT0lOVEVSIHBNcGkyUkFJREFjY2VsZXJhdG9yU3VjY2Vz c1JlcGx5RGVzY3JpcHRvcl90OworCisvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwor dHlwZWRlZiB1bmlvbiBfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTgoreworICAgIE1QSTJf REVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIERlZmF1bHQ7CisgICAg TVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgQWRkcmVzc1Jl cGx5OworICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAg IFNDU0lJT1N1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVND UklQVE9SICAgICAgVGFyZ2V0QXNzaXN0U3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVF9DT01NQU5E X0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SICAgICBUYXJnZXRDb21tYW5kQnVmZmVyOworICAgIE1Q STJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFJBSURBY2NlbGVy YXRvclN1Y2Nlc3M7CisgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgV29yZHM7Cit9IE1QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sIE1Q STJfUE9JTlRFUiBQVFJfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwKKyAgICBNcGkyUmVw bHlEZXNjcmlwdG9yc1VuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcGx5RGVzY3JpcHRvcnNV bmlvbl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZh bDsKK30gYXRvbWljX3Q7CisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgIGF0b21pY19sb2FkX2Fj cV9pbnQoJih2KS0+dmFsKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkgYXRvbWljX3N0b3JlX3Jl bF9pbnQoJih2KS0+dmFsLCBpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpICAgYXRvbWljX2ZldGNo YWRkX2ludCgmKHYpLT52YWwsIC0xKQorI2RlZmluZSBhdG9taWNfaW5jKHYpICAgYXRvbWljX2Zl dGNoYWRkX2ludCgmKHYpLT52YWwsIDEpCisKKy8qIElPQ0luaXQgUmVxdWVzdCBtZXNzYWdlICov Cit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JT0NfSU5JVF9SRVFVRVNUCit7CisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAw eDAwICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAg ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgdV9p bnQ4X3QgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAg ICAvKiAweDAzICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQy OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAg ICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisg ICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAg ICAgICAgICAvKiAweDA3ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgVlBf SUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgdV9pbnQ4X3QgICAg ICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5 ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAg ICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAg ICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgdV9pbnQx Nl90ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAv KiAweDBFICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAg ICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAg ICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAg dV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAg ICAgICAvKiAweDE2ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgSG9zdE1T SXhWZWN0b3JzOyAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgdV9pbnQxNl90ICAgICAg ICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICov CisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lU2l6 ZTsgICAgICAgICAvKiAweDFBICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAg UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7ICAvKiAweDFDICovCisgICAgdV9pbnQxNl90 ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVEZXB0aDsgICAgICAgICAgICAvKiAw eDFFICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJBZGRy ZXNzSGlnaDsgICAgICAgICAvKiAweDIwICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAg ICAgICAgU3lzdGVtUmVwbHlBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDI0ICovCisgICAgdV9p bnQ2NF90ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3M7 ICAvKiAweDI4ICovCisgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNj cmlwdG9yUG9zdFF1ZXVlQWRkcmVzczsvKiAweDMwICovCisgICAgdV9pbnQ2NF90ICAgICAgICAg ICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVBZGRyZXNzOyAgICAgICAgICAvKiAweDM4ICovCisg ICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAg ICAgICAgICAvKiAweDQwICovCit9IE1QSTJfSU9DX0lOSVRfUkVRVUVTVCwgTVBJMl9QT0lOVEVS IFBUUl9NUEkyX0lPQ19JTklUX1JFUVVFU1QsCisgICAgTXBpMklPQ0luaXRSZXF1ZXN0X3QsIE1Q STJfUE9JTlRFUiBwTXBpMklPQ0luaXRSZXF1ZXN0X3Q7CisKKy8qCisgKiBNUiBwcml2YXRlIGRl ZmluZXMKKyAqLworI2RlZmluZSBNUl9QRF9JTlZBTElEIDB4RkZGRgorI2RlZmluZSBNQVhfU1BB Tl9ERVBUSCA4CisjZGVmaW5lIE1BWF9SQUlETUFQX1NQQU5fREVQVEggKE1BWF9TUEFOX0RFUFRI KQorI2RlZmluZSBNQVhfUk9XX1NJWkUgMzIKKyNkZWZpbmUgTUFYX1JBSURNQVBfUk9XX1NJWkUg KE1BWF9ST1dfU0laRSkKKyNkZWZpbmUgTUFYX0xPR0lDQUxfRFJJVkVTIDY0CisjZGVmaW5lIE1B WF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1B WF9SQUlETUFQX1ZJRVdTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1BWF9BUlJBWVMg MTI4CisjZGVmaW5lIE1BWF9SQUlETUFQX0FSUkFZUyAoTUFYX0FSUkFZUykKKyNkZWZpbmUgTUFY X1BIWVNJQ0FMX0RFVklDRVMgMjU2CisjZGVmaW5lIE1BWF9SQUlETUFQX1BIWVNJQ0FMX0RFVklD RVMgKE1BWF9QSFlTSUNBTF9ERVZJQ0VTKQorI2RlZmluZSBNUl9EQ01EX0xEX01BUF9HRVRfSU5G TyAgICAweDAzMDBlMTAxICAgLy8gZ2V0IHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIG9mIHRoaXMg TEQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAKKyAqIFJBSUQgbWFwIHJlbGF0ZWQgc3RydWN0dXJlcyAKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKyAKK3R5cGVkZWYgc3RydWN0IF9NUl9ERVZfSEFORExFX0lORk8geworICAg IHVfaW50MTZfdCAgY3VyRGV2SGRsOyAgIC8vIHRoZSBkZXZpY2UgaGFuZGxlIGN1cnJlbnRseSB1 c2VkIGJ5IGZ3IHRvIGlzc3VlIHRoZSBjb21tYW5kLgorICAgIHVfaW50OF90ICAgdmFsaWRIYW5k bGVzOyAgICAgIC8vIGJpdG1hcCBvZiB2YWxpZCBkZXZpY2UgaGFuZGxlcy4KKyAgICB1X2ludDhf dCAgIHJlc2VydmVkOworICAgIHVfaW50MTZfdCAgZGV2SGFuZGxlWzJdOyAgICAgIC8vIDB4MDQg ZGV2IGhhbmRsZXMgZm9yIGFsbCB0aGUgcGF0aHMuCit9IE1SX0RFVl9IQU5ETEVfSU5GTzsgICAg CisgCit0eXBlZGVmIHN0cnVjdCBfTVJfQVJSQVlfSU5GTyB7CisgICAgdV9pbnQxNl90ICAgICAg cGRbTUFYX1JBSURNQVBfUk9XX1NJWkVdOworfSBNUl9BUlJBWV9JTkZPOyAgICAgICAgICAgICAg ICAgICAgICAgLy8gMHg0MCwgVG90YWwgU2l6ZQorIAordHlwZWRlZiBzdHJ1Y3QgX01SX1FVQURf RUxFTUVOVCB7CisgICAgdV9pbnQ2NF90ICAgICBsb2dTdGFydDsgICAgICAgICAgICAgICAgICAg Ly8gMHgwMAorICAgIHVfaW50NjRfdCAgICAgbG9nRW5kOyAgICAgICAgICAgICAgICAgICAgIC8v IDB4MDgKKyAgICB1X2ludDY0X3QgICAgIG9mZnNldEluU3BhbjsgICAgICAgICAgICAgICAvLyAw eDEwCisgICAgdV9pbnQzMl90ICAgICBkaWZmOyAgICAgICAgICAgICAgICAgICAgICAgLy8gMHgx OAorICAgIHVfaW50MzJfdCAgICAgcmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8vIDB4MUMK K30gTVJfUVVBRF9FTEVNRU5UOyAgICAgICAgICAgICAgICAgICAgICAvLyAweDIwLCBUb3RhbCBz aXplCisgCit0eXBlZGVmIHN0cnVjdCBfTVJfU1BBTl9JTkZPIHsKKyAgICB1X2ludDMyX3QgICAg ICAgICAgICAgbm9FbGVtZW50czsgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50MzJfdCAg ICAgICAgICAgICByZXNlcnZlZDE7ICAgICAgICAgICAgICAvLyAweDA0CisgICAgTVJfUVVBRF9F TEVNRU5UIHF1YWRbTUFYX1JBSURNQVBfU1BBTl9ERVBUSF07ICAgLy8gMHgwOAorfSBNUl9TUEFO X0lORk87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDEwOCwgVG90YWwgc2l6ZQor ICAgIAordHlwZWRlZiBzdHJ1Y3QgX01SX0xEX1NQQU5fIHsgICAgICAgICAgIC8vIFNQQU4gc3Ry dWN0dXJlCisgICAgdV9pbnQ2NF90ICAgICAgc3RhcnRCbGs7ICAgICAgICAgICAgICAgICAgLy8g MHgwMCwgc3RhcnRpbmcgYmxvY2sgbnVtYmVyIGluIGFycmF5CisgICAgdV9pbnQ2NF90ICAgICAg bnVtQmxrczsgICAgICAgICAgICAgICAgICAgLy8gMHgwOCwgbnVtYmVyIG9mIGJsb2NrcworICAg IHVfaW50MTZfdCAgICAgIGFycmF5UmVmOyAgICAgICAgICAgICAgICAgIC8vIDB4MTAsIGFycmF5 IHJlZmVyZW5jZQorICAgIHVfaW50OF90ICAgICAgIHJlc2VydmVkWzZdOyAgICAgICAgICAgICAg IC8vIDB4MTIKK30gTVJfTERfU1BBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDE4 LCBUb3RhbCBTaXplCisKK3R5cGVkZWYgc3RydWN0IF9NUl9TUEFOX0JMT0NLX0lORk8geworICAg IHVfaW50NjRfdCAgICAgICAgICBudW1fcm93czsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHJv d3Mvc3BhbgorICAgIE1SX0xEX1NQQU4gICBzcGFuOyAgICAgICAgICAgICAgICAgLy8gMHgwOAor ICAgIE1SX1NQQU5fSU5GTyBibG9ja19zcGFuX2luZm87ICAgICAgLy8gMHgyMAorfSBNUl9TUEFO X0JMT0NLX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9NUl9MRF9SQUlEIHsKKyAgICBzdHJ1Y3Qg eworICAgICAgICB1X2ludDMyX3QgICAgIGZwQ2FwYWJsZSAgICAgICAgICAgOjE7CisgICAgICAg IHVfaW50MzJfdCAgICAgcmVzZXJ2ZWQ1ICAgICAgICAgICA6MzsKKyAgICAgICAgdV9pbnQzMl90 ICAgICBsZFBpTW9kZSAgICAgICAgICAgIDo0OworICAgICAgICB1X2ludDMyX3QgICAgIHBkUGlN b2RlICAgICAgICAgICAgOjQ7IC8vIEV2ZXJ5IFBkIGhhcyB0byBiZSBzYW1lLgorICAgICAgICB1 X2ludDMyX3QgICAgIGVuY3J5cHRpb25UeXBlICAgICAgOjg7IC8vIEZERSBvciBjdGxyIGVuY3J5 cHRpb24gKE1SX0xEX0VOQ1JZUFRJT05fVFlQRSkKKyAgICAgICAgdV9pbnQzMl90ICAgICBmcFdy aXRlQ2FwYWJsZSAgICAgIDoxOworICAgICAgICB1X2ludDMyX3QgICAgIGZwUmVhZENhcGFibGUg ICAgICAgOjE7CisgICAgICAgIHVfaW50MzJfdCAgICAgZnBXcml0ZUFjcm9zc1N0cmlwZSA6MTsK KyAgICAgICAgdV9pbnQzMl90ICAgICBmcFJlYWRBY3Jvc3NTdHJpcGUgIDoxOworICAgICAgICB1 X2ludDMyX3QgICAgIGZwTm9uUldDYXBhYmxlICAgICAgOjE7IC8vIFRSVUUgaWYgc3VwcG9ydGlu ZyBOb24gUlcgSU8KKyAgICAgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZDQgICAgICAgICAgIDo3 OworICAgIH0gY2FwYWJpbGl0eTsgICAgICAgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50 MzJfdCAgICAgcmVzZXJ2ZWQ2OworICAgIHVfaW50NjRfdCAgICAgc2l6ZTsgICAgICAgICAgICAg Ly8gMHgwOCwgTEQgc2l6ZSBpbiBibG9ja3MKKworICAgIHVfaW50OF90ICAgICAgc3BhbkRlcHRo OyAgICAgICAgLy8gMHgxMCwgVG90YWwgTnVtYmVyIG9mIFNwYW5zCisgICAgdV9pbnQ4X3QgICAg ICBsZXZlbDsgICAgICAgICAgICAvLyAweDExLCBSQUlEIGxldmVsCisgICAgdV9pbnQ4X3QgICAg ICBzdHJpcGVTaGlmdDsgICAgICAvLyAweDEyLCBzaGlmdC1jb3VudCB0byBnZXQgc3RyaXBlIHNp emUgKDA9NTEyLCAxPTFLLCA3PTY0SywgZXRjLikKKyAgICB1X2ludDhfdCAgICAgIHJvd1NpemU7 ICAgICAgICAgIC8vIDB4MTMsIG51bWJlciBvZiBkaXNrcyBpbiBhIHJvdworCisgICAgdV9pbnQ4 X3QgICAgICByb3dEYXRhU2l6ZTsgICAgICAvLyAweDE0LCBudW1iZXIgb2YgZGF0YSBkaXNrcyBp biBhIHJvdworICAgIHVfaW50OF90ICAgICAgd3JpdGVNb2RlOyAgICAgICAgLy8gMHgxNSwgV1JJ VEVfVEhST1VHSCBvciBXUklURV9CQUNLCisgICAgdV9pbnQ4X3QgICAgICBQUkw7ICAgICAgICAg ICAgICAvLyAweDE2LCBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gUkFJRDEgYW5kIFJBSUQxRQor ICAgIHVfaW50OF90ICAgICAgU1JMOyAgICAgICAgICAgICAgLy8gMHgxNworCisgICAgdV9pbnQx Nl90ICAgICB0YXJnZXRJZDsgICAgICAgICAgICAgICAvLyAweDE4LCBsZCBUYXJnZXQgSWQuCisg ICAgdV9pbnQ4X3QgICAgICBsZFN0YXRlOyAgICAgICAgICAvLyAweDFhLCBzdGF0ZSBvZiBsZCwg c3RhdGUgY29ycmVzcG9uZHMgdG8gTVJfTERfU1RBVEUKKyAgICB1X2ludDhfdCAgICAgIHJlZ1R5 cGVSZXFPbldyaXRlOy8vIDB4MWIsIFByZSBjYWxjdWxhdGUgcmVnaW9uIHR5cGUgcmVxdWVzdHMg YmFzZWQgb24gTUZDIGV0Yy4uCisgICAgdV9pbnQ4X3QgICAgICBtb2RGYWN0b3I7ICAgICAgICAv LyAweDFjLCBzYW1lIGFzIHJvd1NpemUsCisgICAgdV9pbnQ4X3QgICAgICByZWdUeXBlUmVxT25S ZWFkOyAvLyAweDFkLCByZWdpb24gbG9jayB0eXBlIHVzZWQgZm9yIHJlYWQsIHZhbGlkIG9ubHkg aWYgcmVnVHlwZU9uUmVhZElzVmFsaWQ9MQorICAgIHVfaW50MTZfdCAgICAgc2VxTnVtOyAgICAg ICAgICAgICAgICAgLy8gMHgxZSwgTEQgc2VxdWVuY2UgbnVtYmVyCisKKyAgICBzdHJ1Y3Qgewor ICAgICAgICB1X2ludDMyX3QgbGRTeW5jUmVxdWlyZWQ6MTsgICAgICAgLy8gVGhpcyBMRCByZXF1 aXJlcyBzeW5jIGNvbW1hbmQgYmVmb3JlIGNvbXBsZXRpbmcKKyAgICAgICAgdV9pbnQzMl90IHJl Z1R5cGVSZXFPblJlYWRMc1ZhbGlkOjE7IC8vIFF1YWxpZmllciBmb3IgcmVnVHlwZU9uUmVhZAor ICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQ6MzA7CisgICAgfSBmbGFnczsgICAgICAgICAgICAg ICAgICAgICAgICAvLyAweDIwCisKKyAgICB1X2ludDhfdCAgICAgIExVTls4XTsgICAgICAgICAg IC8vIDB4MjQsIDggYnl0ZSBMVU4gZmllbGQgdXNlZCBmb3IgU0NTSQorICAgIHVfaW50OF90ICAg ICAgZnBJb1RpbWVvdXRGb3JMZDsgLy8gMHgyQywgdGltZW91dCB2YWx1ZSBmb3IgRlAgSU9zCisg ICAgdV9pbnQ4X3QgICAgICByZXNlcnZlZDJbM107ICAgICAvLyAweDJECisgICAgdV9pbnQzMl90 ICAgICBsb2dpY2FsQmxvY2tMZW5ndGg7IC8vIDB4MzAgTG9naWNhbCBibG9jayBzaXplIGZvciB0 aGUgTEQKKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2ludDMyX3QgTGRQaUV4cDo0OyAgICAgICAg Ly8gMHgzNCwgUF9JX0VYUE9ORU5UIGZvciBSZWFkQ2FwIDE2CisgICAgICAgIHVfaW50MzJfdCBM ZExvZ2ljYWxCbG9ja0V4cDo0OyAvLyAweDM0LCBMT0dJQ0FMIEJMT0NLUyBQRVIgUEhZUyBCTE9D SworICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQxOjI0OyAgICAgLy8gMHgzNAorICAgIH0gZXhw b25lbnQ7CisgICAgdV9pbnQ4X3QgICAgICByZXNlcnZlZDNbMHg4MC0weDM4XTsgLy8gMHgzOCAK K30gTVJfTERfUkFJRDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4ODAsIFRvdGFsIFNpemUK KwordHlwZWRlZiBzdHJ1Y3QgX01SX0xEX1NQQU5fTUFQIHsKKyAgICBNUl9MRF9SQUlEICBsZFJh aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDAwCisgICAgdV9pbnQ4X3QgICAgZGF0 YUFybU1hcFtNQVhfUkFJRE1BUF9ST1dfU0laRV07ICAvLyAweDgwLCBuZWVkZWQgZm9yIEdFVF9B Uk0oKSAtIFIwLzEvNSBvbmx5LgorICAgIE1SX1NQQU5fQkxPQ0tfSU5GTyAgc3BhbkJsb2NrW01B WF9SQUlETUFQX1NQQU5fREVQVEhdOyAgLy8gMHhBMAorfSBNUl9MRF9TUEFOX01BUDsgICAgICAg ICAgICAgICAgLy8gMHg5RTAKKwordHlwZWRlZiBzdHJ1Y3QgX01SX0ZXX1JBSURfTUFQIHsKKyAg ICB1X2ludDMyX3QgIHRvdGFsU2l6ZTsgICAgLy8gdG90YWwgc2l6ZSBvZiB0aGlzIHN0cnVjdHVy ZSwgaW5jbHVkaW5nIHRoaXMgZmllbGQuCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeyAg ICAgIC8vIFNpbXBsZSBtZXRob2Qgb2YgdmVyc2lvbiBjaGVja2luZyB2YXJpYWJsZXMKKyAgICAg ICAgICAgIHVfaW50MzJfdCAgICAgICAgIG1heExkOworICAgICAgICAgICAgdV9pbnQzMl90ICAg ICAgICAgbWF4U3BhbkRlcHRoOworICAgICAgICAgICAgdV9pbnQzMl90ICAgICAgICAgbWF4Um93 U2l6ZTsKKyAgICAgICAgICAgIHVfaW50MzJfdCAgICAgICAgIG1heFBkQ291bnQ7CisgICAgICAg ICAgICB1X2ludDMyX3QgICAgICAgICBtYXhBcnJheXM7CisgICAgICAgIH0gdmFsaWRhdGlvbklu Zm87CisgICAgICAgIHVfaW50MzJfdCAgICAgICAgICAgICB2ZXJzaW9uWzVdOworICAgICAgICB1 X2ludDMyX3QgICAgICAgICAgICAgcmVzZXJ2ZWQxWzVdOworICAgIH0gcmFpZF9kZXNjOworICAg IHVfaW50MzJfdCAgICAgICAgIGxkQ291bnQ7ICAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBs ZHMuCisgICAgdV9pbnQzMl90ICAgICAgICAgUmVzZXJ2ZWQxOworICAgIHVfaW50OF90ICAgICAg ICAgIGxkVGd0SWRUb0xkW01BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTK01BWF9SQUlETUFQX1ZJ RVdTXTsgLy8gMHgyMAorICAgIC8vIFRoaXMgZG9lc24ndCBjb3JyZXNwb25kIHRvCisgICAgLy8g RlcgTGQgVGd0IElkIHRvIExELCBidXQgd2lsbCBwdXJnZS4gRm9yIGV4YW1wbGU6IGlmIHRndCBJ ZCBpcyA0CisgICAgLy8gYW5kIEZXIExEIGlzIDIsIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBMRCwg Rlcgd2lsbCBwb3B1bGF0ZSB0aGUKKyAgICAvLyBhcnJheSBsaWtlIHRoaXMuIFsweEZGLCAweEZG LCAweEZGLCAweEZGLCAweDAsLi4uLi5dLiBUaGlzIGlzIHRvCisgICAgLy8gaGVscCByZWR1Y2Ug dGhlIGVudGlyZSBzdHJjdHVyZSBzaXplIGlmIHRoZXJlIGFyZSBmZXcgTERzIG9yCisgICAgLy8g ZHJpdmVyIGlzIGxvb2tpbmcgaW5mbyBmb3IgMSBMRCBvbmx5LgorICAgIHVfaW50OF90ICAgICAg ICAgIGZwUGRJb1RpbWVvdXRTZWM7ICAgICAgICAvLyB0aW1lb3V0IHZhbHVlIHVzZWQgYnkgZHJp dmVyIGluIEZQIElPcworICAgIHVfaW50OF90ICAgICAgICAgICByZXNlcnZlZDJbN107CisgICAg TVJfQVJSQVlfSU5GTyAgICAgIGFyTWFwSW5mb1tNQVhfUkFJRE1BUF9BUlJBWVNdOyAgICAgICAg ICAgICAgLy8gMHgwMGE4CisgICAgTVJfREVWX0hBTkRMRV9JTkZPIGRldkhuZGxJbmZvW01BWF9S QUlETUFQX1BIWVNJQ0FMX0RFVklDRVNdOyAgLy8gMHgyMGE4CisgICAgTVJfTERfU1BBTl9NQVAg ICAgIGxkU3Bhbk1hcFsxXTsgLy8gMHgyOGE4LVswLU1BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVT K01BWF9SQUlETUFQX1ZJRVdTKzFdOworfSBNUl9GV19SQUlEX01BUDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gMHgzMjg4LCBUb3RhbCBTaXplCisKK3R5cGVkZWYgc3RydWN0IF9MRF9M T0FEX0JBTEFOQ0VfSU5GTworeworICAgIHVfaW50OF90ICAgICAgbG9hZEJhbGFuY2VGbGFnOwor ICAgIHVfaW50OF90ICAgICAgcmVzZXJ2ZWQxOworICAgIHVfaW50MTZfdCAgICAgcmFpZDFEZXZI YW5kbGVbMl07CisgICAgYXRvbWljX3QgICAgIHNjc2lfcGVuZGluZ19jbWRzWzJdOworICAgIHVf aW50NjRfdCAgICAgbGFzdF9hY2Nlc3NlZF9ibG9ja1syXTsKK30gTERfTE9BRF9CQUxBTkNFX0lO Rk8sICpQTERfTE9BRF9CQUxBTkNFX0lORk87CisKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBz dHJ1Y3QgX01SX0ZXX1JBSURfTUFQX0FMTCB7CisgICAgTVJfRldfUkFJRF9NQVAgcmFpZE1hcDsK KyAgICBNUl9MRF9TUEFOX01BUCBsZFNwYW5NYXBbTUFYX0xPR0lDQUxfRFJJVkVTIC0gMV07Cit9 IE1SX0ZXX1JBSURfTUFQX0FMTDsKKyNwcmFnbWEgcGFjaygpCisKK3N0cnVjdCBJT19SRVFVRVNU X0lORk8geworICAgIHVfaW50NjRfdCBsZFN0YXJ0QmxvY2s7CisgICAgdV9pbnQzMl90IG51bUJs b2NrczsKKyAgICB1X2ludDE2X3QgbGRUZ3RJZDsKKyAgICB1X2ludDhfdCBpc1JlYWQ7CisgICAg dV9pbnQxNl90IGRldkhhbmRsZTsKKyAgICB1X2ludDY0X3QgcGRCbG9jazsKKyAgICB1X2ludDhf dCBmcE9rRm9ySW87Cit9OworCit0eXBlZGVmIHN0cnVjdCBfTVJfTERfVEFSR0VUX1NZTkMgewor ICAgIHVfaW50OF90ICB0YXJnZXRJZDsKKyAgICB1X2ludDhfdCAgcmVzZXJ2ZWQ7CisgICAgdV9p bnQxNl90IHNlcU51bTsKK30gTVJfTERfVEFSR0VUX1NZTkM7CisKKyNkZWZpbmUgSUVFRV9TR0Vf RkxBR1NfQUREUl9NQVNLICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdT X1NZU1RFTV9BRERSICAgICAgICAgICgweDAwKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19JT0NE RFJfQUREUiAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfSU9DUExCX0FE RFIgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERS ICAgICAgICgweDAzKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UICAgICAg ICAoMHg4MCkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfRU5EX09GX0xJU1QgICAgICAgICAgKDB4 NDApCisKK3VuaW9uIGRlc2NfdmFsdWUgeworICAgIHVfaW50NjRfdCB3b3JkOworICAgIHN0cnVj dCB7CisgICAgICAgIHVfaW50MzJfdCBsb3c7CisgICAgICAgIHVfaW50MzJfdCBoaWdoOworICAg IH0gdTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqIAorICogVGVtcG9yYXJ5IGNvbW1hbmQgCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCitzdHJ1Y3QgbXJzYXNfdG1wX2RjbWQgeworICAgIGJ1c19kbWFfdGFnX3QgICAgICB0 bXBfZGNtZF90YWc7ICAgIC8vIHRhZyBmb3IgdG1wIERNQ0QgY21kICAKKyAgICBidXNfZG1hbWFw X3QgICAgICAgdG1wX2RjbWRfZG1hbWFwOyAvLyBkbWFtYXAgZm9yIHRtcCBEQ01EIGNtZCAKKyAg ICB2b2lkICAgICAgICAgICAgICAgKnRtcF9kY21kX21lbTsgICAvLyB2aXJ0dWFsIGFkZHIgb2Yg dG1wIERDTUQgY21kIAorICAgIGJ1c19hZGRyX3QgICAgICAgICB0bXBfZGNtZF9waHlzX2FkZHI7 IC8vcGh5c2ljYWwgYWRkciBvZiB0bXAgRENNRCAKK307CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogUmVn aXN0ZXIgc2V0LCBpbmNsdWRlZCBsZWdhY3kgY29udHJvbGxlcnMgMTA2OCBhbmQgMTA3OCwgCisg KiBzdHJ1Y3R1cmUgZXh0ZW5kZWQgZm9yIDEwNzggcmVnaXN0ZXJzCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisj cHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0IF9tcnNhc19yZWdpc3Rlcl9zZXQgeworICAg IHVfaW50MzJfdCAgICAgZG9vcmJlbGw7ICAgICAgICAgICAgICAgICAgICAgICAvKjAwMDBoKi8K KyAgICB1X2ludDMyX3QgICAgIGZ1c2lvbl9zZXFfb2Zmc2V0OyAgICAgICAgICAgICAgLyowMDA0 aCovCisgICAgdV9pbnQzMl90ICAgICBmdXNpb25faG9zdF9kaWFnOyAgICAgICAgICAgICAgIC8q MDAwOGgqLworICAgIHVfaW50MzJfdCAgICAgcmVzZXJ2ZWRfMDE7ICAgICAgICAgICAgICAgICAg ICAvKjAwMENoKi8KKworICAgIHVfaW50MzJfdCAgICAgaW5ib3VuZF9tc2dfMDsgICAgICAgICAg ICAgICAgICAvKjAwMTBoKi8KKyAgICB1X2ludDMyX3QgICAgIGluYm91bmRfbXNnXzE7ICAgICAg ICAgICAgICAgICAgLyowMDE0aCovCisgICAgdV9pbnQzMl90ICAgICBvdXRib3VuZF9tc2dfMDsg ICAgICAgICAgICAgICAgIC8qMDAxOGgqLworICAgIHVfaW50MzJfdCAgICAgb3V0Ym91bmRfbXNn XzE7ICAgICAgICAgICAgICAgICAvKjAwMUNoKi8KKworICAgIHVfaW50MzJfdCAgICAgaW5ib3Vu ZF9kb29yYmVsbDsgICAgICAgICAgICAgICAvKjAwMjBoKi8KKyAgICB1X2ludDMyX3QgICAgIGlu Ym91bmRfaW50cl9zdGF0dXM7ICAgICAgICAgICAgLyowMDI0aCovCisgICAgdV9pbnQzMl90ICAg ICBpbmJvdW5kX2ludHJfbWFzazsgICAgICAgICAgICAgIC8qMDAyOGgqLworCisgICAgdV9pbnQz Ml90ICAgICBvdXRib3VuZF9kb29yYmVsbDsgICAgICAgICAgICAgIC8qMDAyQ2gqLworICAgIHVf aW50MzJfdCAgICAgb3V0Ym91bmRfaW50cl9zdGF0dXM7ICAgICAgICAgICAvKjAwMzBoKi8KKyAg ICB1X2ludDMyX3QgICAgIG91dGJvdW5kX2ludHJfbWFzazsgICAgICAgICAgICAgLyowMDM0aCov CisKKyAgICB1X2ludDMyX3QgICAgIHJlc2VydmVkXzFbMl07ICAgICAgICAgICAgICAgICAgLyow MDM4aCovCisKKyAgICB1X2ludDMyX3QgICAgIGluYm91bmRfcXVldWVfcG9ydDsgICAgICAgICAg ICAgLyowMDQwaCovCisgICAgdV9pbnQzMl90ICAgICBvdXRib3VuZF9xdWV1ZV9wb3J0OyAgICAg ICAgICAgIC8qMDA0NGgqLworCisgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF8yWzldOyAgICAg ICAgICAgICAgICAgIC8qMDA0OGgqLworICAgIHVfaW50MzJfdCAgICAgcmVwbHlfcG9zdF9ob3N0 X2luZGV4OyAgICAgICAgICAvKjAwNkNoKi8KKyAgICB1X2ludDMyX3QgICAgIHJlc2VydmVkXzJf MlsxMl07ICAgICAgICAgICAgICAgLyowMDcwaCovCisKKyAgICB1X2ludDMyX3QgICAgIG91dGJv dW5kX2Rvb3JiZWxsX2NsZWFyOyAgICAgICAgLyowMEEwaCovCisKKyAgICB1X2ludDMyX3QgICAg IHJlc2VydmVkXzNbM107ICAgICAgICAgICAgICAgICAgLyowMEE0aCovCisKKyAgICB1X2ludDMy X3QgICAgIG91dGJvdW5kX3NjcmF0Y2hfcGFkIDsgICAgICAgICAgLyowMEIwaCovCisgICAgdV9p bnQzMl90ICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZF8yOyAgICAgICAgIC8qMDBCNGgqLworCisg ICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF80WzJdOyAgICAgICAgICAgICAgICAgIC8qMDBCOGgq LworCisgICAgdV9pbnQzMl90ICAgICBpbmJvdW5kX2xvd19xdWV1ZV9wb3J0IDsgICAgICAgIC8q MDBDMGgqLworCisgICAgdV9pbnQzMl90ICAgICBpbmJvdW5kX2hpZ2hfcXVldWVfcG9ydCA7ICAg ICAgIC8qMDBDNGgqLworCisgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF81OyAgICAgICAgICAg ICAgICAgICAgIC8qMDBDOGgqLworICAgIHVfaW50MzJfdCAgICAgICAgIHJlc182WzExXTsgICAg ICAgICAgICAgICAgICAvKkNDaCovCisgICAgdV9pbnQzMl90ICAgICAgICAgaG9zdF9kaWFnOwor ICAgIHVfaW50MzJfdCAgICAgICAgIHNlcV9vZmZzZXQ7CisgICAgdV9pbnQzMl90ICAgICBpbmRl eF9yZWdpc3RlcnNbODA3XTsgICAgICAgICAgIC8qMDBDQ2gqLworCit9IG1yc2FzX3JlZ19zZXQ7 CisjcHJhZ21hIHBhY2soKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlybXdhcmUgSW50ZXJmYWNlIERl ZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBNRkkgc3RhbmRzIGZvciBNZWdhUkFJRCBTQVMgRlcgSW50 ZXJmYWNlLiBUaGlzIGlzIGp1c3QgYSBtb25pa2VyCisgKiBmb3IgcHJvdG9jb2wgYmV0d2VlbiB0 aGUgc29mdHdhcmUgYW5kIGZpcm13YXJlLiBDb21tYW5kcyBhcmUKKyAqIGlzc3VlZCB1c2luZyAi bWVzc2FnZSBmcmFtZXMiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGVyBwb3N0cyBpdHMgc3RhdGUg aW4gdXBwZXIgNCBiaXRzIG9mIG91dGJvdW5kX21zZ18wIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUg TUZJX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZp bmUgTUZJX1NUQVRFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNk ZWZpbmUgTUZJX1NUQVRFX0JCX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAK KyNkZWZpbmUgTUZJX1NUQVRFX0ZXX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAw MDAKKyNkZWZpbmUgTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFICAgICAgICAgICAgICAgIDB4NjAw MDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZXX0lOSVRfMiAgICAgICAgICAgICAgICAgICAgIDB4 NzAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0RFVklDRV9TQ0FOICAgICAgICAgICAgICAgICAg IDB4ODAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0JPT1RfTUVTU0FHRV9QRU5ESU5HICAgICAg ICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFICAgICAgICAgICAg ICAgICAgIDB4QTAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX1JFQURZICAgICAgICAgICAgICAg ICAgICAgICAgIDB4QjAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX09QRVJBVElPTkFMICAgICAg ICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZBVUxUICAgICAgICAg ICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgTUZJX1JFU0VUX1JFUVVJUkVEICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUZJX1JFU0VUX0FEQVBURVIg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUVHQU1GSV9GUkFNRV9T SVpFICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIE1SU0FTX01GSV9GUkFNRV9TSVpF ICAgICAgICAgICAgICAgICAgICAxMDI0IAorI2RlZmluZSBNUlNBU19NRklfU0VOU0VfU0laRSAg ICAgICAgICAgICAgICAgICAgMTI4IAorCisvKgorICogRHVyaW5nIEZXIGluaXQsIGNsZWFyIHBl bmRpbmcgY21kcyAmIHJlc2V0IHN0YXRlIHVzaW5nIGluYm91bmRfbXNnXzAKKyAqCisgKiBBQk9S VCAgICAgICAgOiBBYm9ydCBhbGwgcGVuZGluZyBjbWRzCisgKiBSRUFEWSAgICAgICAgOiBNb3Zl IGZyb20gT1BFUkFUSU9OQUwgdG8gUkVBRFkgc3RhdGU7IGRpc2NhcmQgcXVldWUgaW5mbworICog TUZJTU9ERSAgICAgIDogRGlzY2FyZCAocG9zc2libGUpIGxvdyBNRkEgcG9zdGVkIGluIDY0LWJp dCBtb2RlICg/PykKKyAqIENMUl9IQU5EU0hBS0U6IEZXIGlzIHdhaXRpbmcgZm9yIEhBTkRTSEFL RSBmcm9tIEJJT1Mgb3IgRHJpdmVyCisgKiBIT1RQTFVHICAgICAgOiBSZXN1bWUgZnJvbSBIb3Rw bHVnCisgKiBNRklfU1RPUF9BRFAgOiBTZW5kIHNpZ25hbCB0byBGVyB0byBzdG9wIHByb2Nlc3Np bmcKKyAqLworCisjZGVmaW5lIFdSSVRFX1NFUVVFTkNFX09GRlNFVCAgICAgICAgICAgKDB4MDAw MDAwMEZDKSAvLyBJMjAKKyNkZWZpbmUgSE9TVF9ESUFHTk9TVElDX09GRlNFVCAgICAgICAgICAo MHgwMDAwMDBGOCkgIC8vIEkyMAorI2RlZmluZSBESUFHX1dSSVRFX0VOQUJMRSAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIERJQUdfUkVTRVRfQURBUFRFUiAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKworI2RlZmluZSBNRklfQURQX1JFU0VUICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNRklfSU5JVF9BQk9S VCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfSU5JVF9S RUFEWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNRklfSU5J VF9NRklNT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNRklf SU5JVF9DTEVBUl9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBN RklfSU5JVF9IT1RQTFVHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmlu ZSBNRklfU1RPUF9BRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2Rl ZmluZSBNRklfUkVTRVRfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgTUZJX0lOSVRfUkVB RFl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1G SV9JTklUX01GSU1PREV8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1GSV9JTklUX0FCT1JUCisKKy8qCisgKiBNRkkgZnJhbWUgZmxhZ3MgCisgKi8K KyNkZWZpbmUgTUZJX0ZSQU1FX1BPU1RfSU5fUkVQTFlfUVVFVUUgICAgICAgICAgIDB4MDAwMAor I2RlZmluZSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFICAgICAgMHgwMDAxCisj ZGVmaW5lIE1GSV9GUkFNRV9TR0wzMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNk ZWZpbmUgTUZJX0ZSQU1FX1NHTDY0ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2Rl ZmluZSBNRklfRlJBTUVfU0VOU0UzMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVm aW5lIE1GSV9GUkFNRV9TRU5TRTY0ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZp bmUgTUZJX0ZSQU1FX0RJUl9OT05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmlu ZSBNRklfRlJBTUVfRElSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5l IE1GSV9GUkFNRV9ESVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUg TUZJX0ZSQU1FX0RJUl9CT1RIICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBN RklfRlJBTUVfSUVFRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisKKy8qCisgKiBE ZWZpbml0aW9uIGZvciBjbWRfc3RhdHVzCisgKi8KKyNkZWZpbmUgTUZJX0NNRF9TVEFUVVNfUE9M TF9NT0RFICAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIE1GSSBjb21tYW5kIG9wY29kZXMK KyAqLworI2RlZmluZSBNRklfQ01EX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MAorI2RlZmluZSBNRklfQ01EX0xEX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQor I2RlZmluZSBNRklfQ01EX0xEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2Rl ZmluZSBNRklfQ01EX0xEX1NDU0lfSU8gICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmlu ZSBNRklfQ01EX1BEX1NDU0lfSU8gICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBN RklfQ01EX0RDTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBNRklf Q01EX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBNRklfQ01E X1NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBNRklfQ01EX1NU UCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNRklfQ01EX0lOVkFM SUQgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZgorCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9H RVRfSU5GTyAgICAgICAgICAgICAgICAgICAweDAxMDEwMDAwCisjZGVmaW5lIE1SX0RDTURfTERf R0VUX0xJU1QgICAgICAgICAgICAgICAgICAgICAweDAzMDEwMDAwCisjZGVmaW5lIE1SX0RDTURf Q1RSTF9DQUNIRV9GTFVTSCAgICAgICAgICAgICAgICAweDAxMTAxMDAwCisjZGVmaW5lIE1SX0ZM VVNIX0NUUkxfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE1SX0ZMVVNI X0RJU0tfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTVJfRENNRF9D VFJMX1NIVVRET1dOICAgICAgICAgICAgICAgICAgIDB4MDEwNTAwMDAKKyNkZWZpbmUgTVJfRENN RF9ISUJFUk5BVEVfU0hVVERPV04gICAgICAgICAgICAgIDB4MDEwNjAwMDAKKyNkZWZpbmUgTVJf RU5BQkxFX0RSSVZFX1NQSU5ET1dOICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBNUl9E Q01EX0NUUkxfRVZFTlRfR0VUX0lORk8gICAgICAgICAgICAgMHgwMTA0MDEwMAorI2RlZmluZSBN Ul9EQ01EX0NUUkxfRVZFTlRfR0VUICAgICAgICAgICAgICAgICAgMHgwMTA0MDMwMAorI2RlZmlu ZSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVCAgICAgICAgICAgICAgICAgMHgwMTA0MDUwMAorI2Rl ZmluZSBNUl9EQ01EX0xEX0dFVF9QUk9QRVJUSUVTICAgICAgICAgICAgICAgMHgwMzAzMDAwMAor CisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAw MDAwCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUl9SRVNFVF9BTEwgICAgICAgICAgICAgICAweDA4 MDEwMTAwCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUl9SRVNFVF9MRCAgICAgICAgICAgICAgICAw eDA4MDEwMjAwCisjZGVmaW5lIE1SX0RDTURfUERfTElTVF9RVUVSWSAgICAgICAgICAgICAgICAg ICAweDAyMDEwMTAwCisKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYICAgICAgICAgICAg ICAgICAgIDB4MDEwMGUyMDAKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX0lOSVRfREFU QV9HRVQgICAgIDB4MDEwMGUyMDEKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX1FVRVVF X0RBVEEgICAgICAgIDB4MDEwMGUyMDIKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX1VO UkVHSVNURVIgICAgICAgIDB4MDEwMGUyMDMKKyNkZWZpbmUgTUFYX01SX1JPV19TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1SX0NQWF9ESVJfV1JJVEUgICAgICAgICAg ICAgICAgICAgICAgICAxCisjZGVmaW5lIE1SX0NQWF9ESVJfUkVBRCAgICAgICAgICAgICAgICAg ICAgICAgICAwCisjZGVmaW5lIE1SX0NQWF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAg ICAxCisKKyNkZWZpbmUgTVJfRENNRF9DVFJMX0lPX01FVFJJQ1NfR0VUICAgICAgICAgICAgIDB4 MDExNzAyMDAgICAvLyBnZXQgSU8gbWV0cmljcworCisjZGVmaW5lIE1SX0VWVF9DRkdfQ0xFQVJF RCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKworI2RlZmluZSBNUl9FVlRfTERfU1RBVEVf Q0hBTkdFICAgICAgICAgICAgICAgICAgMHgwMDUxCisjZGVmaW5lIE1SX0VWVF9QRF9JTlNFUlRF RCAgICAgICAgICAgICAgICAgICAgICAweDAwNWIKKyNkZWZpbmUgTVJfRVZUX1BEX1JFTU9WRUQg ICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MAorI2RlZmluZSBNUl9FVlRfTERfQ1JFQVRFRCAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDhhCisjZGVmaW5lIE1SX0VWVF9MRF9ERUxFVEVEICAg ICAgICAgICAgICAgICAgICAgICAweDAwOGIKKyNkZWZpbmUgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lN UE9SVEVEICAgICAgICAgICAgIDB4MDBkYgorI2RlZmluZSBNUl9FVlRfTERfT0ZGTElORSAgICAg ICAgICAgICAgICAgICAgICAgMHgwMGZjCisjZGVmaW5lIE1SX0VWVF9DVFJMX0hPU1RfQlVTX1ND QU5fUkVRVUVTVEVEICAgICAweDAxNTIKKyNkZWZpbmUgTVJfRVZUX0NUUkxfUEVSRl9DT0xMRUNU SU9OICAgICAgICAgICAgIDB4MDE3ZQorCisvKgorICogTUZJIGNvbW1hbmQgY29tcGxldGlvbiBj b2RlcworICovCitlbnVtIE1GSV9TVEFUIHsKKyAgICBNRklfU1RBVF9PSyA9IDB4MDAsCisgICAg TUZJX1NUQVRfSU5WQUxJRF9DTUQgPSAweDAxLAorICAgIE1GSV9TVEFUX0lOVkFMSURfRENNRCA9 IDB4MDIsCisgICAgTUZJX1NUQVRfSU5WQUxJRF9QQVJBTUVURVIgPSAweDAzLAorICAgIE1GSV9T VEFUX0lOVkFMSURfU0VRVUVOQ0VfTlVNQkVSID0gMHgwNCwKKyAgICBNRklfU1RBVF9BQk9SVF9O T1RfUE9TU0lCTEUgPSAweDA1LAorICAgIE1GSV9TVEFUX0FQUF9IT1NUX0NPREVfTk9UX0ZPVU5E ID0gMHgwNiwKKyAgICBNRklfU1RBVF9BUFBfSU5fVVNFID0gMHgwNywKKyAgICBNRklfU1RBVF9B UFBfTk9UX0lOSVRJQUxJWkVEID0gMHgwOCwKKyAgICBNRklfU1RBVF9BUlJBWV9JTkRFWF9JTlZB TElEID0gMHgwOSwKKyAgICBNRklfU1RBVF9BUlJBWV9ST1dfTk9UX0VNUFRZID0gMHgwYSwKKyAg ICBNRklfU1RBVF9DT05GSUdfUkVTT1VSQ0VfQ09ORkxJQ1QgPSAweDBiLAorICAgIE1GSV9TVEFU X0RFVklDRV9OT1RfRk9VTkQgPSAweDBjLAorICAgIE1GSV9TVEFUX0RSSVZFX1RPT19TTUFMTCA9 IDB4MGQsCisgICAgTUZJX1NUQVRfRkxBU0hfQUxMT0NfRkFJTCA9IDB4MGUsCisgICAgTUZJX1NU QVRfRkxBU0hfQlVTWSA9IDB4MGYsCisgICAgTUZJX1NUQVRfRkxBU0hfRVJST1IgPSAweDEwLAor ICAgIE1GSV9TVEFUX0ZMQVNIX0lNQUdFX0JBRCA9IDB4MTEsCisgICAgTUZJX1NUQVRfRkxBU0hf SU1BR0VfSU5DT01QTEVURSA9IDB4MTIsCisgICAgTUZJX1NUQVRfRkxBU0hfTk9UX09QRU4gPSAw eDEzLAorICAgIE1GSV9TVEFUX0ZMQVNIX05PVF9TVEFSVEVEID0gMHgxNCwKKyAgICBNRklfU1RB VF9GTFVTSF9GQUlMRUQgPSAweDE1LAorICAgIE1GSV9TVEFUX0hPU1RfQ09ERV9OT1RfRk9VTlQg PSAweDE2LAorICAgIE1GSV9TVEFUX0xEX0NDX0lOX1BST0dSRVNTID0gMHgxNywKKyAgICBNRklf U1RBVF9MRF9JTklUX0lOX1BST0dSRVNTID0gMHgxOCwKKyAgICBNRklfU1RBVF9MRF9MQkFfT1VU X09GX1JBTkdFID0gMHgxOSwKKyAgICBNRklfU1RBVF9MRF9NQVhfQ09ORklHVVJFRCA9IDB4MWEs CisgICAgTUZJX1NUQVRfTERfTk9UX09QVElNQUwgPSAweDFiLAorICAgIE1GSV9TVEFUX0xEX1JC TERfSU5fUFJPR1JFU1MgPSAweDFjLAorICAgIE1GSV9TVEFUX0xEX1JFQ09OX0lOX1BST0dSRVNT ID0gMHgxZCwKKyAgICBNRklfU1RBVF9MRF9XUk9OR19SQUlEX0xFVkVMID0gMHgxZSwKKyAgICBN RklfU1RBVF9NQVhfU1BBUkVTX0VYQ0VFREVEID0gMHgxZiwKKyAgICBNRklfU1RBVF9NRU1PUllf Tk9UX0FWQUlMQUJMRSA9IDB4MjAsCisgICAgTUZJX1NUQVRfTUZDX0hXX0VSUk9SID0gMHgyMSwK KyAgICBNRklfU1RBVF9OT19IV19QUkVTRU5UID0gMHgyMiwKKyAgICBNRklfU1RBVF9OT1RfRk9V TkQgPSAweDIzLAorICAgIE1GSV9TVEFUX05PVF9JTl9FTkNMID0gMHgyNCwKKyAgICBNRklfU1RB VF9QRF9DTEVBUl9JTl9QUk9HUkVTUyA9IDB4MjUsCisgICAgTUZJX1NUQVRfUERfVFlQRV9XUk9O RyA9IDB4MjYsCisgICAgTUZJX1NUQVRfUFJfRElTQUJMRUQgPSAweDI3LAorICAgIE1GSV9TVEFU X1JPV19JTkRFWF9JTlZBTElEID0gMHgyOCwKKyAgICBNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFM SURfQUNUSU9OID0gMHgyOSwKKyAgICBNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFMSURfREFUQSA9 IDB4MmEsCisgICAgTUZJX1NUQVRfU0FTX0NPTkZJR19JTlZBTElEX1BBR0UgPSAweDJiLAorICAg IE1GSV9TVEFUX1NBU19DT05GSUdfSU5WQUxJRF9UWVBFID0gMHgyYywKKyAgICBNRklfU1RBVF9T Q1NJX0RPTkVfV0lUSF9FUlJPUiA9IDB4MmQsCisgICAgTUZJX1NUQVRfU0NTSV9JT19GQUlMRUQg PSAweDJlLAorICAgIE1GSV9TVEFUX1NDU0lfUkVTRVJWQVRJT05fQ09ORkxJQ1QgPSAweDJmLAor ICAgIE1GSV9TVEFUX1NIVVRET1dOX0ZBSUxFRCA9IDB4MzAsCisgICAgTUZJX1NUQVRfVElNRV9O T1RfU0VUID0gMHgzMSwKKyAgICBNRklfU1RBVF9XUk9OR19TVEFURSA9IDB4MzIsCisgICAgTUZJ X1NUQVRfTERfT0ZGTElORSA9IDB4MzMsCisgICAgTUZJX1NUQVRfUEVFUl9OT1RJRklDQVRJT05f UkVKRUNURUQgPSAweDM0LAorICAgIE1GSV9TVEFUX1BFRVJfTk9USUZJQ0FUSU9OX0ZBSUxFRCA9 IDB4MzUsCisgICAgTUZJX1NUQVRfUkVTRVJWQVRJT05fSU5fUFJPR1JFU1MgPSAweDM2LAorICAg IE1GSV9TVEFUX0kyQ19FUlJPUlNfREVURUNURUQgPSAweDM3LAorICAgIE1GSV9TVEFUX1BDSV9F UlJPUlNfREVURUNURUQgPSAweDM4LAorICAgIE1GSV9TVEFUX0NPTkZJR19TRVFfTUlTTUFUQ0gg PSAweDY3LAorCisgICAgTUZJX1NUQVRfSU5WQUxJRF9TVEFUVVMgPSAweEZGCit9OworCisvKgor ICogTnVtYmVyIG9mIG1haWxib3ggYnl0ZXMgaW4gRENNRCBtZXNzYWdlIGZyYW1lCisgKi8KKyNk ZWZpbmUgTUZJX01CT1hfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKK2VudW0g TVJfRVZUX0NMQVNTIHsKKworICAgICAgICBNUl9FVlRfQ0xBU1NfREVCVUcgPSAtMiwKKyAgICAg ICAgTVJfRVZUX0NMQVNTX1BST0dSRVNTID0gLTEsCisgICAgICAgIE1SX0VWVF9DTEFTU19JTkZP ID0gMCwKKyAgICAgICAgTVJfRVZUX0NMQVNTX1dBUk5JTkcgPSAxLAorICAgICAgICBNUl9FVlRf Q0xBU1NfQ1JJVElDQUwgPSAyLAorICAgICAgICBNUl9FVlRfQ0xBU1NfRkFUQUwgPSAzLAorICAg ICAgICBNUl9FVlRfQ0xBU1NfREVBRCA9IDQsCisKK307CisKK2VudW0gTVJfRVZUX0xPQ0FMRSB7 CisKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9MRCA9IDB4MDAwMSwKKyAgICAgICAgTVJfRVZUX0xP Q0FMRV9QRCA9IDB4MDAwMiwKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9FTkNMID0gMHgwMDA0LAor ICAgICAgICBNUl9FVlRfTE9DQUxFX0JCVSA9IDB4MDAwOCwKKyAgICAgICAgTVJfRVZUX0xPQ0FM RV9TQVMgPSAweDAwMTAsCisgICAgICAgIE1SX0VWVF9MT0NBTEVfQ1RSTCA9IDB4MDAyMCwKKyAg ICAgICAgTVJfRVZUX0xPQ0FMRV9DT05GSUcgPSAweDAwNDAsCisgICAgICAgIE1SX0VWVF9MT0NB TEVfQ0xVU1RFUiA9IDB4MDA4MCwKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9BTEwgPSAweGZmZmYs CisKK307CisKK2VudW0gTVJfRVZUX0FSR1MgeworCisgICAgICAgIE1SX0VWVF9BUkdTX05PTkUs CisgICAgICAgIE1SX0VWVF9BUkdTX0NEQl9TRU5TRSwKKyAgICAgICAgTVJfRVZUX0FSR1NfTEQs CisgICAgICAgIE1SX0VWVF9BUkdTX0xEX0NPVU5ULAorICAgICAgICBNUl9FVlRfQVJHU19MRF9M QkEsCisgICAgICAgIE1SX0VWVF9BUkdTX0xEX09XTkVSLAorICAgICAgICBNUl9FVlRfQVJHU19M RF9MQkFfUERfTEJBLAorICAgICAgICBNUl9FVlRfQVJHU19MRF9QUk9HLAorICAgICAgICBNUl9F VlRfQVJHU19MRF9TVEFURSwKKyAgICAgICAgTVJfRVZUX0FSR1NfTERfU1RSSVAsCisgICAgICAg IE1SX0VWVF9BUkdTX1BELAorICAgICAgICBNUl9FVlRfQVJHU19QRF9FUlIsCisgICAgICAgIE1S X0VWVF9BUkdTX1BEX0xCQSwKKyAgICAgICAgTVJfRVZUX0FSR1NfUERfTEJBX0xELAorICAgICAg ICBNUl9FVlRfQVJHU19QRF9QUk9HLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9TVEFURSwKKyAg ICAgICAgTVJfRVZUX0FSR1NfUENJLAorICAgICAgICBNUl9FVlRfQVJHU19SQVRFLAorICAgICAg ICBNUl9FVlRfQVJHU19TVFIsCisgICAgICAgIE1SX0VWVF9BUkdTX1RJTUUsCisgICAgICAgIE1S X0VWVF9BUkdTX0VDQywKKyAgICAgICAgTVJfRVZUX0FSR1NfTERfUFJPUCwKKyAgICAgICAgTVJf RVZUX0FSR1NfUERfU1BBUkUsCisgICAgICAgIE1SX0VWVF9BUkdTX1BEX0lOREVYLAorICAgICAg ICBNUl9FVlRfQVJHU19ESUFHX1BBU1MsCisgICAgICAgIE1SX0VWVF9BUkdTX0RJQUdfRkFJTCwK KyAgICAgICAgTVJfRVZUX0FSR1NfUERfTEJBX0xCQSwKKyAgICAgICAgTVJfRVZUX0FSR1NfUE9S VF9QSFksCisgICAgICAgIE1SX0VWVF9BUkdTX1BEX01JU1NJTkcsCisgICAgICAgIE1SX0VWVF9B UkdTX1BEX0FERFJFU1MsCisgICAgICAgIE1SX0VWVF9BUkdTX0JJVE1BUCwKKyAgICAgICAgTVJf RVZUX0FSR1NfQ09OTkVDVE9SLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9QRCwKKyAgICAgICAg TVJfRVZUX0FSR1NfUERfRlJVLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9QQVRISU5GTywKKwkJ TVJfRVZUX0FSR1NfUERfUE9XRVJfU1RBVEUsCisgICAgICAgIE1SX0VWVF9BUkdTX0dFTkVSSUMs Cit9OworCisKKy8qCisgKiBUaHVuZGVyYm9sdCAoYW5kIGxhdGVyKSBEZWZpbmVzIAorICovCisj ZGVmaW5lIE1SU0FTX01BWF9TWl9DSEFJTl9GUkFNRSAgICAgICAgICAgICAgICAgIDEwMjQKKyNk ZWZpbmUgTUZJX0ZVU0lPTl9FTkFCTEVfSU5URVJSVVBUX01BU0sgKDB4MDAwMDAwMDkpCisjZGVm aW5lIE1SU0FTX01QSTJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkUgICAgIDI1NgorI2RlZmlu ZSBNUlNBU19NUEkyX0ZVTkNUSU9OX1BBU1NUSFJVX0lPX1JFUVVFU1QgICAweEYwCisjZGVmaW5l IE1SU0FTX01QSTJfRlVOQ1RJT05fTERfSU9fUkVRVUVTVCAgICAgICAgIDB4RjEKKyNkZWZpbmUg TVJTQVNfTE9BRF9CQUxBTkNFX0ZMQUcgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIE1S U0FTX0RDTURfTUJPWF9QRU5EX0ZMQUcgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBIT1NU X0RJQUdfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgSE9T VF9ESUFHX1JFU0VUX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgTVJT QVNfVEJPTFRfTUFYX1JFU0VUX1RSSUVTICAgICAgICAgICAgICAzCisjZGVmaW5lIE1SU0FTX01B WF9NRklfQ01EUyAgICAgICAgICAgICAgICAgICAgICAgMzIKKworLyoKKyAqIEludmFkZXIgRGVm aW5lcyAKKyAqLworI2RlZmluZSBNUEkyX1RZUEVfQ1VEQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MgorI2RlZmluZSBNUEkyNV9TQVNfREVWSUNFMF9GTEFHU19FTkFCTEVEX0ZBU1Rf UEFUSCAgIDB4NDAwMAorI2RlZmluZSBNUl9STF9GTEFHU19HUkFOVF9ERVNUSU5BVElPTl9DUFUw ICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTVJfUkxfRkxBR1NfR1JBTlRfREVTVElOQVRJT05fQ1BV MSAgICAgICAgICAweDEwCisjZGVmaW5lIE1SX1JMX0ZMQUdTX0dSQU5UX0RFU1RJTkFUSU9OX0NV REEgICAgICAgICAgMHg4MAorI2RlZmluZSBNUl9STF9GTEFHU19TRVFfTlVNX0VOQUJMRSAgICAg ICAgICAgICAgICAgIDB4OAorCisvKiAKKyAqIFQxMCBQSSBkZWZpbmVzIAorICovCisjZGVmaW5l IE1SX1BST1RfSU5GT19UWVBFX0NPTlRST0xMRVIgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBN UlNBU19TQ1NJX1ZBUklBQkxFX0xFTkdUSF9DTUQgICAgICAgICAgICAweDdmCisjZGVmaW5lIE1S U0FTX1NDU0lfU0VSVklDRV9BQ1RJT05fUkVBRDMyICAgICAgICAgIDB4OQorI2RlZmluZSBNUlNB U19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1dSSVRFMzIgICAgICAgICAweEIKKyNkZWZpbmUgTVJTQVNf U0NTSV9BRERMX0NEQl9MRU4gICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBNUlNBU19S RF9XUl9QUk9URUNUX0NIRUNLX0FMTCAgICAgICAgICAgICAweDIwCisjZGVmaW5lIE1SU0FTX1JE X1dSX1BST1RFQ1RfQ0hFQ0tfTk9ORSAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgTVJTQVNfU0NT SUJMT0NLU0laRSAgICAgICAgICAgICAgICAgICAgICAgNTEyCisKKy8qCisgKiBSYWlkIGNvbnRl eHQgZmxhZ3MKKyAqLworI2RlZmluZSBNUl9SQUlEX0NUWF9SQUlEX0ZMQUdTX0lPX1NVQl9UWVBF X1NISUZUICAgMHg0CisjZGVmaW5lIE1SX1JBSURfQ1RYX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVf TUFTSyAgICAweDMwCit0eXBlZGVmIGVudW0gTVJfUkFJRF9GTEFHU19JT19TVUJfVFlQRSB7Cisg ICAgICAgIE1SX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfTk9ORSA9IDAsCisgICAgICAgIE1SX1JB SURfRkxBR1NfSU9fU1VCX1RZUEVfU1lTVEVNX1BEID0gMSwKK30gTVJfUkFJRF9GTEFHU19JT19T VUJfVFlQRTsKKworLyoKKyAqIFJlcXVlc3QgZGVzY3JpcHRvciB0eXBlcworICovCisjZGVmaW5l IE1SU0FTX1JFUV9ERVNDUklQVF9GTEFHU19MRF9JTyAgICAgICAgICAgMHg3CisjZGVmaW5lIE1S U0FTX1JFUV9ERVNDUklQVF9GTEFHU19NRkEgICAgICAgICAgICAgMHgxCisjZGVmaW5lIE1SU0FT X1JFUV9ERVNDUklQVF9GTEFHU19OT19MT0NLICAgICAgICAgMHgyCisjZGVmaW5lIE1SU0FTX1JF UV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUICAgICAgMQorI2RlZmluZSBNUlNBU19GUF9DTURf TEVOICAgICAgMTYKKyNkZWZpbmUgTVJTQVNfRlVTSU9OX0lOX1JFU0VUIDAKKworI2RlZmluZSBS QUlEX0NUWF9TUEFOQVJNX0FSTV9TSElGVCAgICAgICgwKQorI2RlZmluZSBSQUlEX0NUWF9TUEFO QVJNX0FSTV9NQVNLICAgICAgICgweDFmKQorI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX1NQQU5f U0hJRlQgICAgICg1KQorI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX1NQQU5fTUFTSyAgICAgICgw eEUwKQorCisvKiAgICAKKyAqIERlZmluZSByZWdpb24gbG9jayB0eXBlcworICovCit0eXBlZGVm IGVudW0gICAgX1JFR0lPTl9UWVBFIHsKKyAgICBSRUdJT05fVFlQRV9VTlVTRUQgICAgICAgPSAw LCAgICAvLyBsb2NrIGlzIGN1cnJlbnRseSBub3QgYWN0aXZlCisgICAgUkVHSU9OX1RZUEVfU0hB UkVEX1JFQUQgID0gMSwgICAgLy8gc2hhcmVkIGxvY2sgKGZvciByZWFkcykKKyAgICBSRUdJT05f VFlQRV9TSEFSRURfV1JJVEUgPSAyLAorICAgIFJFR0lPTl9UWVBFX0VYQ0xVU0lWRSAgICA9IDMs ICAgIC8vIGV4Y2x1c2l2ZSBsb2NrIChmb3Igd3JpdGVzKQorfSBSRUdJT05fVFlQRTsKKworLyog CisgKiBNUiBwcml2YXRlIGRlZmluZXMgCisgKi8KKyNkZWZpbmUgTVJfUERfSU5WQUxJRCAweEZG RkYKKyNkZWZpbmUgTUFYX1NQQU5fREVQVEggOAorI2RlZmluZSBNQVhfUkFJRE1BUF9TUEFOX0RF UFRIIChNQVhfU1BBTl9ERVBUSCkKKyNkZWZpbmUgTUFYX1JPV19TSVpFIDMyCisjZGVmaW5lIE1B WF9SQUlETUFQX1JPV19TSVpFIChNQVhfUk9XX1NJWkUpCisjZGVmaW5lIE1BWF9MT0dJQ0FMX0RS SVZFUyA2NAorI2RlZmluZSBNQVhfUkFJRE1BUF9MT0dJQ0FMX0RSSVZFUyAoTUFYX0xPR0lDQUxf RFJJVkVTKQorI2RlZmluZSBNQVhfUkFJRE1BUF9WSUVXUyAoTUFYX0xPR0lDQUxfRFJJVkVTKQor I2RlZmluZSBNQVhfQVJSQVlTIDEyOAorI2RlZmluZSBNQVhfUkFJRE1BUF9BUlJBWVMgKE1BWF9B UlJBWVMpCisjZGVmaW5lIE1BWF9QSFlTSUNBTF9ERVZJQ0VTIDI1NgorI2RlZmluZSBNQVhfUkFJ RE1BUF9QSFlTSUNBTF9ERVZJQ0VTIChNQVhfUEhZU0lDQUxfREVWSUNFUykKKyNkZWZpbmUgTVJf RENNRF9MRF9NQVBfR0VUX0lORk8gMHgwMzAwZTEwMSAKKworLyoKKyAqIFNDU0ktQ0FNIFJlbGF0 ZWQgRGVmaW5lcyAKKyAqLworI2RlZmluZSBNUlNBU19TQ1NJX01BWF9MVU5TICAgICAwICAgLy96 ZXJvIGZvciBub3cgCQorI2RlZmluZSBNUlNBU19TQ1NJX0lOSVRJQVRPUl9JRCAyNTUKKyNkZWZp bmUgTVJTQVNfU0NTSV9NQVhfQ01EUyAgICAgOAorI2RlZmluZSBNUlNBU19TQ1NJX01BWF9DREJf TEVOICAxNgorI2RlZmluZSBNUlNBU19TQ1NJX1NFTlNFX0JVRkZFUlNJWkUgOTYKKyNkZWZpbmUg TVJTQVNfTUFYX1NHTCAgICAgICAgICAgNzAKKyNkZWZpbmUgTVJTQVNfTUFYX0lPX1NJWkUgICAg ICAgKDI1NiAqIDEwMjQpCisjZGVmaW5lIE1SU0FTX0lOVEVSTkFMX0NNRFMgICAgIDMyCisKKy8q IFJlcXVlc3QgdHlwZXMgKi8KKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfSU5URVJOQUxfQ01EICAg ICAweDAKKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfQUVOX0ZFVENIICAgICAgICAweDEKKyNkZWZp bmUgTVJTQVNfUkVRX1RZUEVfUEFTU1RIUlUgICAgICAgICAweDIKKyNkZWZpbmUgTVJTQVNfUkVR X1RZUEVfR0VUU0VUX1BBUkFNICAgICAweDMKKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfU0NTSV9J TyAgICAgICAgICAweDQKKworLyogUmVxdWVzdCBzdGF0ZXMgKi8KKyNkZWZpbmUgTVJTQVNfUkVR X1NUQVRFX0ZSRUUgICAgICAgICAgICAwCisjZGVmaW5lIE1SU0FTX1JFUV9TVEFURV9CVVNZICAg ICAgICAgICAgMQorI2RlZmluZSBNUlNBU19SRVFfU1RBVEVfVFJBTiAgICAgICAgICAgIDIKKyNk ZWZpbmUgTVJTQVNfUkVRX1NUQVRFX0NPTVBMRVRFICAgICAgICAzCisKK2VudW0gbXJzYXNfcmVx X2ZsYWdzIHsKKyAgICBNUlNBU19ESVJfVU5LTk9XTiA9IDB4MSwKKyAgICBNUlNBU19ESVJfSU4g PSAweDIsCisgICAgTVJTQVNfRElSX09VVCA9IDB4NCwKKyAgICBNUlNBU19ESVJfTk9ORSA9IDB4 OCwKK307CisKKy8qIAorICogQWRhcHRlciBSZXNldCBTdGF0ZXMgCisgKi8KK2VudW0geworICAg IE1SU0FTX0hCQV9PUEVSQVRJT05BTCAgICAgICAgICAgICAgICAgPSAwLAorICAgIE1SU0FTX0FE UFJFU0VUX1NNX0lORkFVTFQgICAgICAgICAgICAgPSAxLAorICAgIE1SU0FTX0FEUFJFU0VUX1NN X0ZXX1JFU0VUX1NVQ0NFU1MgICAgPSAyLAorICAgIE1SU0FTX0FEUFJFU0VUX1NNX09QRVJBVElP TkFMICAgICAgICAgPSAzLAorICAgIE1SU0FTX0hXX0NSSVRJQ0FMX0VSUk9SICAgICAgICAgICAg ICAgPSA0LAorICAgIE1SU0FTX0FEUFJFU0VUX0lOUFJPR19TSUdOICAgICAgICAgICAgPSAweERF QURERUFELAorfTsKKworLyogCisgKiBNUFQgQ29tbWFuZCBTdHJ1Y3R1cmUgCisgKi8KK3N0cnVj dCBtcnNhc19tcHRfY21kIHsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAgKmlvX3Jl cXVlc3Q7CisgICAgYnVzX2FkZHJfdCAgICAgIGlvX3JlcXVlc3RfcGh5c19hZGRyOworICAgIE1Q STJfU0dFX0lPX1VOSU9OICpjaGFpbl9mcmFtZTsKKyAgICBidXNfYWRkcl90ICAgICAgY2hhaW5f ZnJhbWVfcGh5c19hZGRyOworICAgIHVfaW50MzJfdCAgICAgICBzZ2VfY291bnQ7CisgICAgdV9p bnQ4X3QgICAgICAgICpzZW5zZTsKKyAgICBidXNfYWRkcl90ICAgICAgc2Vuc2VfcGh5c19hZGRy OworICAgIHVfaW50OF90ICAgICAgICByZXRyeV9mb3JfZndfcmVzZXQ7CisgICAgTVJTQVNfUkVR VUVTVF9ERVNDUklQVE9SX1VOSU9OICpyZXF1ZXN0X2Rlc2M7CisgICAgdV9pbnQzMl90ICAgICAg IHN5bmNfY21kX2lkeDsgLy9Gb3IgZ2V0dGluZyBNRkkgY21kIGZyb20gbGlzdCB3aGVuIGNvbXBs ZXRlCisgICAgdV9pbnQzMl90ICAgICAgIGluZGV4OworICAgIHVfaW50OF90ICAgICAgICBmbGFn czsKKyAgICB1X2ludDhfdCAgICAgICAgbG9hZF9iYWxhbmNlOworICAgIGJ1c19zaXplX3QgICAg ICBsZW5ndGg7ICAgICAgIC8vIHJlcXVlc3QgbGVuZ3RoIAorICAgIHVfaW50MzJfdCAgICAgICBl cnJvcl9jb2RlOyAgIC8vIGVycm9yIGR1cmluZyByZXF1ZXN0IGRtYW1hcCBsb2FkICAKKyAgICBi dXNfZG1hbWFwX3QgICAgZGF0YV9kbWFtYXA7ICAgICAgICAKKyAgICB2b2lkICAgICAgICAgICAg KmRhdGE7CisgICAgdW5pb24gY2NiICAgICAgICpjY2JfcHRyOyAgICAgLy8gcG9pbnRlciB0byBj Y2IgCisgICAgc3RydWN0IGNhbGxvdXQgIGNtX2NhbGxvdXQ7CisgICAgc3RydWN0IG1yc2FzX3Nv ZnRjICAqc2M7CisgICAgVEFJTFFfRU5UUlkobXJzYXNfbXB0X2NtZCkgIG5leHQ7Cit9OworCisv KiAKKyAqIE1GSSBDb21tYW5kIFN0cnVjdHVyZSAKKyAqLworc3RydWN0IG1yc2FzX21maV9jbWQg eworICAgIHVuaW9uIG1yc2FzX2ZyYW1lICAgKmZyYW1lOworICAgIGJ1c19kbWFtYXBfdCAgICAg ICAgZnJhbWVfZG1hbWFwOyAgIC8vIG1maSBmcmFtZSBkbWFtYXAgCisgICAgdm9pZCAgICAgICAg ICAgICAgICAqZnJhbWVfbWVtOyAgICAgLy8gbWZpIGZyYW1lIHZpcnR1YWwgYWRkciAKKyAgICBi dXNfYWRkcl90ICAgICAgICAgIGZyYW1lX3BoeXNfYWRkcjsgLy8gbWZpIGZyYW1lIHBoeXNpY2Fs IGFkZHIgCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAqc2Vuc2U7CisgICAgYnVzX2RtYW1hcF90 ICAgICAgICBzZW5zZV9kbWFtYXA7ICAgLy8gbWZpIHNlbnNlIGRtYW1hcCAKKyAgICB2b2lkICAg ICAgICAgICAgICAgICpzZW5zZV9tZW07ICAgICAvLyBtZmkgc2Vuc2UgdmlydHVhbCBhZGRyIAor ICAgIGJ1c19hZGRyX3QgICAgICAgICAgc2Vuc2VfcGh5c19hZGRyOworICAgIHVfaW50MzJfdCAg ICAgICAgICAgaW5kZXg7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICBzeW5jX2NtZDsKKyAgICB1 X2ludDhfdCAgICAgICAgICAgIGNtZF9zdGF0dXM7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICBh Ym9ydF9hZW47CisgICAgdV9pbnQ4X3QgICAgICAgICAgICByZXRyeV9mb3JfZndfcmVzZXQ7Cisg ICAgc3RydWN0IG1yc2FzX3NvZnRjICAqc2M7CisgICAgdW5pb24gY2NiICAgICAgICAgICAqY2Ni X3B0cjsgCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQx Nl90IHNtaWQ7CisgICAgICAgICAgICB1X2ludDE2X3QgcmVzdmQ7CisgICAgICAgIH0gY29udGV4 dDsKKyAgICAgICAgdV9pbnQzMl90IGZyYW1lX2NvdW50OworICAgIH0gY21kX2lkOyAKKyAgICBU QUlMUV9FTlRSWShtcnNhc19tZmlfY21kKSAgbmV4dDsKK307CisKKworLyoKKyAqIGRlZmluZSBj b25zdGFudHMgZm9yIGRldmljZSBsaXN0IHF1ZXJ5IG9wdGlvbnMKKyAqLworZW51bSBNUl9QRF9R VUVSWV9UWVBFIHsKKyAgICBNUl9QRF9RVUVSWV9UWVBFX0FMTCAgICAgICAgICAgICAgICA9IDAs CisgICAgTVJfUERfUVVFUllfVFlQRV9TVEFURSAgICAgICAgICAgICAgPSAxLAorICAgIE1SX1BE X1FVRVJZX1RZUEVfUE9XRVJfU1RBVEUgICAgICAgID0gMiwKKyAgICBNUl9QRF9RVUVSWV9UWVBF X01FRElBX1RZUEUgICAgICAgICA9IDMsCisgICAgTVJfUERfUVVFUllfVFlQRV9TUEVFRCAgICAg ICAgICAgICAgPSA0LAorICAgIE1SX1BEX1FVRVJZX1RZUEVfRVhQT1NFRF9UT19IT1NUICAgID0g NSwKK307CisKKyNkZWZpbmUgTVJfRVZUX0NGR19DTEVBUkVEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE1SX0VWVF9MRF9TVEFURV9DSEFOR0UgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDA1MQorI2RlZmluZSBNUl9FVlRfUERfSU5TRVJURUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwNWIKKyNkZWZpbmUgTVJfRVZUX1BEX1JFTU9WRUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwCisjZGVmaW5lIE1SX0VWVF9MRF9D UkVBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4YQorI2RlZmluZSBNUl9F VlRfTERfREVMRVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwOGIKKyNkZWZp bmUgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lNUE9SVEVEICAgICAgICAgICAgICAgICAgICAgMHgwMGRi CisjZGVmaW5lIE1SX0VWVF9MRF9PRkZMSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDBmYworI2RlZmluZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRCAgICAg ICAgICAgICAweDAxNTIKKworZW51bSBNUl9QRF9TVEFURSB7CisgICAgTVJfUERfU1RBVEVfVU5D T05GSUdVUkVEX0dPT0QgICA9IDB4MDAsCisgICAgTVJfUERfU1RBVEVfVU5DT05GSUdVUkVEX0JB RCAgICA9IDB4MDEsCisgICAgTVJfUERfU1RBVEVfSE9UX1NQQVJFICAgICAgICAgICA9IDB4MDIs CisgICAgTVJfUERfU1RBVEVfT0ZGTElORSAgICAgICAgICAgICA9IDB4MTAsCisgICAgTVJfUERf U1RBVEVfRkFJTEVEICAgICAgICAgICAgICA9IDB4MTEsCisgICAgTVJfUERfU1RBVEVfUkVCVUlM RCAgICAgICAgICAgICA9IDB4MTQsCisgICAgTVJfUERfU1RBVEVfT05MSU5FICAgICAgICAgICAg ICA9IDB4MTgsCisgICAgTVJfUERfU1RBVEVfQ09QWUJBQ0sgICAgICAgICAgICA9IDB4MjAsCisg ICAgTVJfUERfU1RBVEVfU1lTVEVNICAgICAgICAgICAgICA9IDB4NDAsCisgfTsKKworIC8qCisg KiBkZWZpbmVzIHRoZSBwaHlzaWNhbCBkcml2ZSBhZGRyZXNzIHN0cnVjdHVyZQorICovCisjcHJh Z21hIHBhY2soMSkKK3N0cnVjdCBNUl9QRF9BRERSRVNTIHsKKyAgICB1X2ludDE2X3QgICAgIGRl dmljZUlkOworICAgIHVfaW50MTZfdCAgICAgZW5jbERldmljZUlkOworCisgICAgdW5pb24gewor ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQ4X3QgIGVuY2xJbmRleDsKKyAgICAg ICAgICAgIHVfaW50OF90ICBzbG90TnVtYmVyOworICAgICAgICB9IG1yUGRBZGRyZXNzOworICAg ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQ4X3QgIGVuY2xQb3NpdGlvbjsKKyAgICAg ICAgICAgIHVfaW50OF90ICBlbmNsQ29ubmVjdG9ySW5kZXg7CisgICAgICAgIH0gbXJFbmNsQWRk cmVzczsKKyAgICB9IHUxOworICAgIHVfaW50OF90ICAgICAgc2NzaURldlR5cGU7CisgICAgdW5p b24geworICAgICAgICB1X2ludDhfdCAgICAgIGNvbm5lY3RlZFBvcnRCaXRtYXA7CisgICAgICAg IHVfaW50OF90ICAgICAgY29ubmVjdGVkUG9ydE51bWJlcnM7CisgICAgfSB1MjsKKyAgICB1X2lu dDY0X3QgICAgIHNhc0FkZHJbMl07Cit9OworI3ByYWdtYSBwYWNrKCkKKworLyoKKyAqIGRlZmlu ZXMgdGhlIHBoeXNpY2FsIGRyaXZlIGxpc3Qgc3RydWN0dXJlCisgKi8KKyNwcmFnbWEgcGFjaygx KQorc3RydWN0IE1SX1BEX0xJU1QgeworICAgIHVfaW50MzJfdCAgICAgICAgICAgICBzaXplOwor ICAgIHVfaW50MzJfdCAgICAgICAgICAgICBjb3VudDsKKyAgICBzdHJ1Y3QgTVJfUERfQUREUkVT UyAgIGFkZHJbMV07Cit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1 Y3QgbXJzYXNfcGRfbGlzdCB7CisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIHRpZDsKKyAgICB1 X2ludDhfdCAgICAgICAgICAgICBkcml2ZVR5cGU7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAg ZHJpdmVTdGF0ZTsKK307CisjcHJhZ21hIHBhY2soKQorCisgLyoKKyAqIGRlZmluZXMgdGhlIGxv Z2ljYWwgZHJpdmUgcmVmZXJlbmNlIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHVuaW9uICBfTVJf TERfUkVGIHsgICAgICAgIC8vIExEIHJlZmVyZW5jZSBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3Qgewor ICAgICAgICB1X2ludDhfdCAgICAgIHRhcmdldElkOyAgICAgLy8gTEQgdGFyZ2V0IGlkICgwIHRv IE1BWF9UQVJHRVRfSUQpCisgICAgICAgIHVfaW50OF90ICAgICAgcmVzZXJ2ZWQ7ICAgICAvLyBy ZXNlcnZlZCB0byBtYWtlIGluIGxpbmUgd2l0aCBNUl9QRF9SRUYKKyAgICAgICAgdV9pbnQxNl90 ICAgICBzZXFOdW07ICAgICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIH0gbGRfY29udGV4dDsK KyAgICB1X2ludDMyX3QgICAgIHJlZjsgICAgICAgICAgICAgIC8vIHNob3J0aGFuZCByZWZlcmVu Y2UgdG8gZnVsbCAzMi1iaXRzCit9IE1SX0xEX1JFRjsgICAgICAgICAgICAgICAgICAgICAgICAv LyA0IGJ5dGVzCisKKworLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgbGlzdCBzdHJ1 Y3R1cmUKKyAqLworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgTVJfTERfTElTVCB7CisgICAgdV9p bnQzMl90ICAgICBsZENvdW50OyAgICAgICAgICAvLyBudW1iZXIgb2YgTERzCisgICAgdV9pbnQz Ml90ICAgICByZXNlcnZlZDsgICAgICAgICAvLyBwYWQgdG8gOC1ieXRlIGJvdW5kYXJ5CisgICAg c3RydWN0IHsKKyAgICAgICAgTVJfTERfUkVGICAgcmVmOyAgICAgICAgICAgIC8vIExEIHJlZmVy ZW5jZQorICAgICAgICB1X2ludDhfdCAgICBzdGF0ZTsgICAgICAgICAgLy8gY3VycmVudCBMRCBz dGF0ZSAoTVJfTERfU1RBVEUpCisgICAgICAgIHVfaW50OF90ICAgIHJlc2VydmVkWzNdOyAgICAv LyBwYWQgdG8gOC1ieXRlIGJvdW5kYXJ5CisgICAgICAgIHVfaW50NjRfdCAgIHNpemU7ICAgICAg ICAgICAvLyBMRCBzaXplCisgICAgfSBsZExpc3RbTUFYX0xPR0lDQUxfRFJJVkVTXTsKK307IAor I3ByYWdtYSBwYWNrKCkKKworLyoKKyAqIFNBUyBjb250cm9sbGVyIHByb3BlcnRpZXMKKyAqLwor I3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfY3RybF9wcm9wIHsKKyAgICB1X2ludDE2X3Qg c2VxX251bTsKKyAgICB1X2ludDE2X3QgcHJlZF9mYWlsX3BvbGxfaW50ZXJ2YWw7CisgICAgdV9p bnQxNl90IGludHJfdGhyb3R0bGVfY291bnQ7CisgICAgdV9pbnQxNl90IGludHJfdGhyb3R0bGVf dGltZW91dHM7CisgICAgdV9pbnQ4X3QgcmVidWlsZF9yYXRlOworICAgIHVfaW50OF90IHBhdHJv bF9yZWFkX3JhdGU7CisgICAgdV9pbnQ4X3QgYmdpX3JhdGU7CisgICAgdV9pbnQ4X3QgY2NfcmF0 ZTsKKyAgICB1X2ludDhfdCByZWNvbl9yYXRlOworICAgIHVfaW50OF90IGNhY2hlX2ZsdXNoX2lu dGVydmFsOworICAgIHVfaW50OF90IHNwaW51cF9kcnZfY291bnQ7CisgICAgdV9pbnQ4X3Qgc3Bp bnVwX2RlbGF5OworICAgIHVfaW50OF90IGNsdXN0ZXJfZW5hYmxlOworICAgIHVfaW50OF90IGNv ZXJjaW9uX21vZGU7CisgICAgdV9pbnQ4X3QgYWxhcm1fZW5hYmxlOworICAgIHVfaW50OF90IGRp c2FibGVfYXV0b19yZWJ1aWxkOworICAgIHVfaW50OF90IGRpc2FibGVfYmF0dGVyeV93YXJuOwor ICAgIHVfaW50OF90IGVjY19idWNrZXRfc2l6ZTsKKyAgICB1X2ludDE2X3QgZWNjX2J1Y2tldF9s ZWFrX3JhdGU7CisgICAgdV9pbnQ4X3QgcmVzdG9yZV9ob3RzcGFyZV9vbl9pbnNlcnRpb247Cisg ICAgdV9pbnQ4X3QgZXhwb3NlX2VuY2xfZGV2aWNlczsKKyAgICB1X2ludDhfdCBtYWludGFpblBk RmFpbEhpc3Rvcnk7CisgICAgdV9pbnQ4X3QgZGlzYWxsb3dIb3N0UmVxdWVzdFJlb3JkZXJpbmc7 CisgICAgdV9pbnQ4X3QgYWJvcnRDQ09uRXJyb3I7ICAvLyBzZXQgVFJVRSB0byBhYm9ydCBDQyBv biBkZXRlY3RpbmcgYW4gaW5jb25zaXN0ZW5jeQorICAgIHVfaW50OF90IGxvYWRCYWxhbmNlTW9k ZTsgICAgIC8vIGxvYWQgYmFsYW5jZSBtb2RlIChNUl9MT0FEX0JBTEFOQ0VfTU9ERSkKKyAgICB1 X2ludDhfdCBkaXNhYmxlQXV0b0RldGVjdEJhY2twbGFuZTsgIC8vIDAgLSB1c2UgYXV0byBkZXRl Y3QgbG9naWMgb2YgYmFja3BsYW5lcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGxpa2UgU0dQSU8sIGkyYyBTRVAgdXNpbmcgaC93IG1lY2hhbnNpbSAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgR1BJTyBwaW5z LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSAtIGRpc2Fi bGUgYXV0byBkZXRlY3QgU0dQSU8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyAyIC0gZGlzYWJsZSBpMmMgU0VQIGF1dG8gZGV0ZWN0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIC0gZGlzYWJsZSBib3RoIGF1dG8gZGV0 ZWN0CisgICAgdV9pbnQ4X3Qgc25hcFZEU3BhY2U7ICAvLyAlIG9mIHNvdXJjZSBMRCB0byBiZSBy ZXNlcnZlZCBmb3IgYSBWRHMgc25hcHNob3QgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIHNuYXBzaG90IHJlcG9zaXRvcnksIGZvciBtZXRhZGF0YSBhbmQgdXNlciBkYXRhLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMT01JSwgMj0xMCUsIDM9MTUlIGFuZCBzbyBvbi4K KyAgICAvKgorICAgICAqIEFkZCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGNvbnRyb2xsZWQgYnkg YSBiaXQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUuCisgICAgICovCisgICAgc3RydWN0IHsK KyAgICAgICAgdV9pbnQzMl90ICAgICBjb3B5QmFja0Rpc2FibGVkICAgICAgICAgICAgOiAxOyAg Ly8gc2V0IFRSVUUgdG8gZGlzYWJsZSBjb3B5QmFjayAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDA9Y29wYmFjayBlbmFibGVkKQor ICAgICAgICB1X2ludDMyX3QgICAgIFNNQVJUZXJFbmFibGVkICAgICAgICAgICAgICA6IDE7Cisg ICAgICAgIHVfaW50MzJfdCAgICAgcHJDb3JyZWN0VW5jb25maWd1cmVkQXJlYXMgIDogMTsKKyAg ICAgICAgdV9pbnQzMl90ICAgICB1c2VGZGVPbmx5ICAgICAgICAgICAgICAgICAgOiAxOworICAg ICAgICB1X2ludDMyX3QgICAgIGRpc2FibGVOQ1EgICAgICAgICAgICAgICAgICA6IDE7CisgICAg ICAgIHVfaW50MzJfdCAgICAgU1NEU01BUlRlckVuYWJsZWQgICAgICAgICAgIDogMTsKKyAgICAg ICAgdV9pbnQzMl90ICAgICBTU0RQYXRyb2xSZWFkRW5hYmxlZCAgICAgICAgOiAxOworICAgICAg ICB1X2ludDMyX3QgICAgIGVuYWJsZVNwaW5Eb3duVW5jb25maWd1cmVkICA6IDE7CisgICAgICAg IHVfaW50MzJfdCAgICAgYXV0b0VuaGFuY2VkSW1wb3J0ICAgICAgICAgIDogMTsKKyAgICAgICAg dV9pbnQzMl90ICAgICBlbmFibGVTZWNyZXRLZXlDb250cm9sICAgICAgOiAxOworICAgICAgICB1 X2ludDMyX3QgICAgIGRpc2FibGVPbmxpbmVDdHJsUmVzZXQgICAgICA6IDE7CisgICAgICAgIHVf aW50MzJfdCAgICAgYWxsb3dCb290V2l0aFBpbm5lZENhY2hlICAgIDogMTsKKyAgICAgICAgdV9p bnQzMl90ICAgICBkaXNhYmxlU3BpbkRvd25IUyAgICAgICAgICAgOiAxOworICAgICAgICB1X2lu dDMyX3QgICAgIGVuYWJsZUpCT0QgICAgICAgICAgICAgICAgICA6IDE7CisgICAgICAgIHVfaW50 MzJfdCAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIDoxODsKKyAgICB9IE9uT2ZmUHJv cGVydGllczsKKyAgICB1X2ludDhfdCAgICAgIGF1dG9TbmFwVkRTcGFjZTsgIC8vICUgb2Ygc291 cmNlIExEIHRvIGJlIHJlc2VydmVkIGZvciBhdXRvIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gc25hcHNob3QgaW4gc25hcHNob3QgcmVwb3NpdG9yeSwgZm9yIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0YWRhdGEgYW5kIHVzZXIgZGF0 YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE9NSUsIDI9MTAlLCAz PTE1JSBhbmQgc28gb24uCisgICAgdV9pbnQ4X3QgICAgICB2aWV3U3BhY2U7ICAgICAgICAvLyBz bmFwc2hvdCB3cml0ZWFibGUgVklFV3MgY2FwYWNpdHkgYXMgYSAlIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gb2Ygc291cmNlIExEIGNhcGFjaXR5LiAwPVJFQUQgb25s eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE9NSUsIDI9MTAlLCAz PTE1JSBhbmQgc28gb24KKyAgICB1X2ludDE2X3QgICAgIHNwaW5Eb3duVGltZTsgICAgIC8vICMg b2YgaWRsZSBtaW51dGVzIGJlZm9yZSBkZXZpY2UgaXMgc3B1biAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGRvd24gKDA9dXNlIEZXIGRlZmF1bHRzKS4KKyAgICB1X2lu dDhfdCAgICAgIHJlc2VydmVkWzI0XTsKKworfTsgCisjcHJhZ21hIHBhY2soKQorCisKKy8qCisg KiBTQVMgY29udHJvbGxlciBpbmZvcm1hdGlvbgorICovCisvLyNwcmFnbWEgcGFjaygxKQorc3Ry dWN0IG1yc2FzX2N0cmxfaW5mbyB7CisgICAgLyogCisgICAgICogUENJIGRldmljZSBpbmZvcm1h dGlvbiAKKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2ludDE2X3QgdmVuZG9yX2lk OworICAgICAgICB1X2ludDE2X3QgZGV2aWNlX2lkOworICAgICAgICB1X2ludDE2X3Qgc3ViX3Zl bmRvcl9pZDsKKyAgICAgICAgdV9pbnQxNl90IHN1Yl9kZXZpY2VfaWQ7CisgICAgICAgIHVfaW50 OF90IHJlc2VydmVkWzI0XTsKKyAgICB9IF9fcGFja2VkIHBjaTsKKyAgICAvKiAKKyAgICAgKiBI b3N0IGludGVyZmFjZSBpbmZvcm1hdGlvbiAKKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAg ICB1X2ludDhfdCBQQ0lYOjE7CisgICAgICAgIHVfaW50OF90IFBDSUU6MTsKKyAgICAgICAgdV9p bnQ4X3QgaVNDU0k6MTsKKyAgICAgICAgdV9pbnQ4X3QgU0FTXzNHOjE7CisgICAgICAgIHVfaW50 OF90IHJlc2VydmVkXzA6NDsKKyAgICAgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMVs2XTsKKyAgICAg ICAgdV9pbnQ4X3QgcG9ydF9jb3VudDsKKyAgICAgICAgdV9pbnQ2NF90IHBvcnRfYWRkcls4XTsK KyAgICB9IF9fcGFja2VkIGhvc3RfaW50ZXJmYWNlOworICAgIC8qCisgICAgICogRGV2aWNlIChi YWNrZW5kKSBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAg ICAgICB1X2ludDhfdCBTUEk6MTsKKyAgICAgICAgdV9pbnQ4X3QgU0FTXzNHOjE7CisgICAgICAg IHVfaW50OF90IFNBVEFfMV81RzoxOworICAgICAgICB1X2ludDhfdCBTQVRBXzNHOjE7CisgICAg ICAgIHVfaW50OF90IHJlc2VydmVkXzA6NDsKKyAgICAgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMVs2 XTsKKyAgICAgICAgdV9pbnQ4X3QgcG9ydF9jb3VudDsKKyAgICAgICAgdV9pbnQ2NF90IHBvcnRf YWRkcls4XTsKKyAgICB9IF9fcGFja2VkIGRldmljZV9pbnRlcmZhY2U7CisKKyAgICAvKgorICAg ICAqIExpc3Qgb2YgY29tcG9uZW50cyByZXNpZGluZyBpbiBmbGFzaC4gQWxsIHN0ciBhcmUgbnVs bCB0ZXJtaW5hdGVkCisgICAgICovCisgICAgdV9pbnQzMl90IGltYWdlX2NoZWNrX3dvcmQ7Cisg ICAgdV9pbnQzMl90IGltYWdlX2NvbXBvbmVudF9jb3VudDsKKworICAgIHN0cnVjdCB7CisgICAg ICAgIGNoYXIgbmFtZVs4XTsKKyAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsKKyAgICAgICAgY2hh ciBidWlsZF9kYXRlWzE2XTsKKyAgICAgICAgY2hhciBidWlsdF90aW1lWzE2XTsKKyAgICB9IF9f cGFja2VkIGltYWdlX2NvbXBvbmVudFs4XTsKKyAgICAvKgorICAgICAqIExpc3Qgb2YgZmxhc2gg Y29tcG9uZW50cyB0aGF0IGhhdmUgYmVlbiBmbGFzaGVkIG9uIHRoZSBjYXJkLCBidXQKKyAgICAg KiBhcmUgbm90IGluIHVzZSwgcGVuZGluZyByZXNldCBvZiB0aGUgYWRhcHRlci4gVGhpcyBsaXN0 IHdpbGwgYmUKKyAgICAgKiBlbXB0eSBpZiBhIGZsYXNoIG9wZXJhdGlvbiBoYXMgbm90IG9jY3Vy cmVkLiBBbGwgc3RpbmdzIGFyZSBudWxsCisgICAgICogdGVybWluYXRlZAorICAgICAqLworICAg IHVfaW50MzJfdCBwZW5kaW5nX2ltYWdlX2NvbXBvbmVudF9jb3VudDsKKworICAgIHN0cnVjdCB7 CisgICAgICAgIGNoYXIgbmFtZVs4XTsKKyAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsKKyAgICAg ICAgY2hhciBidWlsZF9kYXRlWzE2XTsKKyAgICAgICAgY2hhciBidWlsZF90aW1lWzE2XTsKKyAg ICB9IF9fcGFja2VkIHBlbmRpbmdfaW1hZ2VfY29tcG9uZW50WzhdOworCisgICAgdV9pbnQ4X3Qg bWF4X2FybXM7CisgICAgdV9pbnQ4X3QgbWF4X3NwYW5zOworICAgIHVfaW50OF90IG1heF9hcnJh eXM7CisgICAgdV9pbnQ4X3QgbWF4X2xkczsKKyAgICBjaGFyIHByb2R1Y3RfbmFtZVs4MF07Cisg ICAgY2hhciBzZXJpYWxfbm9bMzJdOworCisgICAgLyoKKyAgICAgKiBPdGhlciBwaHlzaWNhbC9j b250cm9sbGVyL29wZXJhdGlvbiBpbmZvcm1hdGlvbi4gSW5kaWNhdGVzIHRoZQorICAgICAqIHBy ZXNlbmNlIG9mIHRoZSBoYXJkd2FyZQorICAgICAqLworICAgIHN0cnVjdCB7CisgICAgICAgIHVf aW50MzJfdCBiYnU6MTsKKyAgICAgICAgdV9pbnQzMl90IGFsYXJtOjE7CisgICAgICAgIHVfaW50 MzJfdCBudnJhbToxOworICAgICAgICB1X2ludDMyX3QgdWFydDoxOworICAgICAgICB1X2ludDMy X3QgcmVzZXJ2ZWQ6Mjg7CisgICAgfSBfX3BhY2tlZCBod19wcmVzZW50OworCisgICAgdV9pbnQz Ml90IGN1cnJlbnRfZndfdGltZTsKKworICAgIC8qCisgICAgICogTWF4aW11bSBkYXRhIHRyYW5z ZmVyIHNpemVzCisgICAgICovCisgICAgdV9pbnQxNl90IG1heF9jb25jdXJyZW50X2NtZHM7Cisg ICAgdV9pbnQxNl90IG1heF9zZ2VfY291bnQ7CisgICAgdV9pbnQzMl90IG1heF9yZXF1ZXN0X3Np emU7CisKKyAgICAvKgorICAgICAqIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGRldmljZSBjb3VudHMK KyAgICAgKi8KKyAgICB1X2ludDE2X3QgbGRfcHJlc2VudF9jb3VudDsKKyAgICB1X2ludDE2X3Qg bGRfZGVncmFkZWRfY291bnQ7CisgICAgdV9pbnQxNl90IGxkX29mZmxpbmVfY291bnQ7CisKKyAg ICB1X2ludDE2X3QgcGRfcHJlc2VudF9jb3VudDsKKyAgICB1X2ludDE2X3QgcGRfZGlza19wcmVz ZW50X2NvdW50OworICAgIHVfaW50MTZfdCBwZF9kaXNrX3ByZWRfZmFpbHVyZV9jb3VudDsKKyAg ICB1X2ludDE2X3QgcGRfZGlza19mYWlsZWRfY291bnQ7CisKKyAgICAvKgorICAgICAqIE1lbW9y eSBzaXplIGluZm9ybWF0aW9uCisgICAgICovCisgICAgdV9pbnQxNl90IG52cmFtX3NpemU7Cisg ICAgdV9pbnQxNl90IG1lbW9yeV9zaXplOworICAgIHVfaW50MTZfdCBmbGFzaF9zaXplOworCisg ICAgLyoKKyAgICAgKiBFcnJvciBjb3VudGVycworICAgICAqLworICAgIHVfaW50MTZfdCBtZW1f Y29ycmVjdGFibGVfZXJyb3JfY291bnQ7CisgICAgdV9pbnQxNl90IG1lbV91bmNvcnJlY3RhYmxl X2Vycm9yX2NvdW50OworCisgICAgLyoKKyAgICAgKiBDbHVzdGVyIGluZm9ybWF0aW9uCisgICAg ICovCisgICAgdV9pbnQ4X3QgY2x1c3Rlcl9wZXJtaXR0ZWQ7CisgICAgdV9pbnQ4X3QgY2x1c3Rl cl9hY3RpdmU7CisKKyAgICAvKgorICAgICAqIEFkZGl0aW9uYWwgbWF4IGRhdGEgdHJhbnNmZXIg c2l6ZXMKKyAgICAgKi8KKyAgICB1X2ludDE2X3QgbWF4X3N0cmlwc19wZXJfaW87CisKKyAgICAv KgorICAgICAqIENvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIHN0cnVjdHVyZXMKKyAgICAgKi8KKyAg ICBzdHJ1Y3QgeworICAgICAgICB1X2ludDMyX3QgcmFpZF9sZXZlbF8wOjE7CisgICAgICAgIHVf aW50MzJfdCByYWlkX2xldmVsXzE6MTsKKyAgICAgICAgdV9pbnQzMl90IHJhaWRfbGV2ZWxfNTox OworICAgICAgICB1X2ludDMyX3QgcmFpZF9sZXZlbF8xRToxOworICAgICAgICB1X2ludDMyX3Qg cmFpZF9sZXZlbF82OjE7CisgICAgICAgIHVfaW50MzJfdCByZXNlcnZlZDoyNzsKKyAgICB9IF9f cGFja2VkIHJhaWRfbGV2ZWxzOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdV9pbnQzMl90IHJi bGRfcmF0ZToxOworICAgICAgICB1X2ludDMyX3QgY2NfcmF0ZToxOworICAgICAgICB1X2ludDMy X3QgYmdpX3JhdGU6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlY29uX3JhdGU6MTsKKyAgICAgICAg dV9pbnQzMl90IHBhdHJvbF9yYXRlOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGFybV9jb250cm9s OjE7CisgICAgICAgIHVfaW50MzJfdCBjbHVzdGVyX3N1cHBvcnRlZDoxOworICAgICAgICB1X2lu dDMyX3QgYmJ1OjE7CisgICAgICAgIHVfaW50MzJfdCBzcGFubmluZ19hbGxvd2VkOjE7CisgICAg ICAgIHVfaW50MzJfdCBkZWRpY2F0ZWRfaG90c3BhcmVzOjE7CisgICAgICAgIHVfaW50MzJfdCBy ZXZlcnRpYmxlX2hvdHNwYXJlczoxOworICAgICAgICB1X2ludDMyX3QgZm9yZWlnbl9jb25maWdf aW1wb3J0OjE7CisgICAgICAgIHVfaW50MzJfdCBzZWxmX2RpYWdub3N0aWM6MTsKKyAgICAgICAg dV9pbnQzMl90IG1peGVkX3JlZHVuZGFuY3lfYXJyOjE7CisgICAgICAgIHVfaW50MzJfdCBnbG9i YWxfaG90X3NwYXJlczoxOworICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQ6MTc7CisgICAgfSBf X3BhY2tlZCBhZGFwdGVyX29wZXJhdGlvbnM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2lu dDMyX3QgcmVhZF9wb2xpY3k6MTsKKyAgICAgICAgdV9pbnQzMl90IHdyaXRlX3BvbGljeToxOwor ICAgICAgICB1X2ludDMyX3QgaW9fcG9saWN5OjE7CisgICAgICAgIHVfaW50MzJfdCBhY2Nlc3Nf cG9saWN5OjE7CisgICAgICAgIHVfaW50MzJfdCBkaXNrX2NhY2hlX3BvbGljeToxOworICAgICAg ICB1X2ludDMyX3QgcmVzZXJ2ZWQ6Mjc7CisgICAgfSBfX3BhY2tlZCBsZF9vcGVyYXRpb25zOwor CisgICAgc3RydWN0IHsKKyAgICAgICAgdV9pbnQ4X3QgbWluOworICAgICAgICB1X2ludDhfdCBt YXg7CisgICAgICAgIHVfaW50OF90IHJlc2VydmVkWzJdOworICAgIH0gX19wYWNrZWQgc3RyaXBl X3N6X29wczsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVfaW50MzJfdCBmb3JjZV9vbmxpbmU6 MTsKKyAgICAgICAgdV9pbnQzMl90IGZvcmNlX29mZmxpbmU6MTsKKyAgICAgICAgdV9pbnQzMl90 IGZvcmNlX3JlYnVpbGQ6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlc2VydmVkOjI5OworICAgIH0g X19wYWNrZWQgcGRfb3BlcmF0aW9uczsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVfaW50MzJf dCBjdHJsX3N1cHBvcnRzX3NhczoxOworICAgICAgICB1X2ludDMyX3QgY3RybF9zdXBwb3J0c19z YXRhOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGxvd19taXhfaW5fZW5jbDoxOworICAgICAgICB1 X2ludDMyX3QgYWxsb3dfbWl4X2luX2xkOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGxvd19zYXRh X2luX2NsdXN0ZXI6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlc2VydmVkOjI3OworICAgIH0gX19w YWNrZWQgcGRfbWl4X3N1cHBvcnQ7CisKKyAgICAvKgorICAgICAqIERlZmluZSBFQ0Mgc2luZ2xl LWJpdC1lcnJvciBidWNrZXQgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICB1X2ludDhfdCBlY2Nf YnVja2V0X2NvdW50OworICAgIHVfaW50OF90IHJlc2VydmVkXzJbMTFdOworCisgICAgLyoKKyAg ICAgKiBJbmNsdWRlIHRoZSBjb250cm9sbGVyIHByb3BlcnRpZXMgKGNoYW5nZWFibGUgaXRlbXMp CisgICAgICovCisgICAgc3RydWN0IG1yc2FzX2N0cmxfcHJvcCBwcm9wZXJ0aWVzOworCisgICAg LyoKKyAgICAgKiBEZWZpbmUgRlcgcGtnIHZlcnNpb24gKHNldCBpbiBlbnZ0IHYnYmxlcyBvbiBP RU0gYmFzaXMpCisgICAgICovCisgICAgY2hhciBwYWNrYWdlX3ZlcnNpb25bMHg2MF07CisKKyAg ICB1X2ludDhfdCBwYWRbMHg4MDAgLSAweDZhMF07Cit9IF9fcGFja2VkOyAKKworLyogCisgKiBM ZCBhbmQgUEQgTWF4IFN1cHBvcnQgRGVmaW5lcyAKKyAqLworI2RlZmluZSBNUlNBU19NQVhfUEQg ICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgTVJTQVNfTUFYX0xEICAgICAgICAg ICAgICAgICAgICAgICAgNjQKKworLyoKKyAqIFdoZW4gU0NTSSBtaWQtbGF5ZXIgY2FsbHMgZHJp dmVyJ3MgcmVzZXQgcm91dGluZSwgZHJpdmVyIHdhaXRzIGZvcgorICogTVJTQVNfUkVTRVRfV0FJ VF9USU1FIHNlY29uZHMgZm9yIGFsbCBvdXRzdGFuZGluZyBJTyB0byBjb21wbGV0ZS4gTm90ZQor ICogdGhhdCB0aGUgZHJpdmVyIGNhbm5vdCBfYWN0dWFsbHlfIGFib3J0IG9yIHJlc2V0IHBlbmRp bmcgY29tbWFuZHMuIFdoaWxlCisgKiBpdCBpcyB3YWl0aW5nIGZvciB0aGUgY29tbWFuZHMgdG8g Y29tcGxldGUsIGl0IHByaW50cyBhIGRpYWdub3N0aWMgbWVzc2FnZQorICogZXZlcnkgTVJTQVNf UkVTRVRfTk9USUNFX0lOVEVSVkFMIHNlY29uZHMKKyAqLworI2RlZmluZSBNUlNBU19SRVNFVF9X QUlUX1RJTUUgICAgICAgICAgICAgICAgIDE4MAorI2RlZmluZSBNUlNBU19JTlRFUk5BTF9DTURf V0FJVF9USU1FICAgICAgICAgIDE4MAorI2RlZmluZSBNUlNBU19JT0NfSU5JVF9XQUlUX1RJTUUg ICAgICAgICAgICAgIDYwIAorI2RlZmluZSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwgICAg ICAgICAgIDUKKyNkZWZpbmUgTVJTQVNfSU9DVExfQ01EICAgICAgICAgICAgICAgICAgICAgICAw CisjZGVmaW5lIE1SU0FTX0RFRkFVTFRfQ01EX1RJTUVPVVQgICAgICAgICAgICAgOTAKKyNkZWZp bmUgTVJTQVNfVEhST1RUTEVfUVVFVUVfREVQVEggICAgICAgICAgICAxNgorCisvKiAKKyAqIEZX IHJlcG9ydHMgdGhlIG1heGltdW0gb2YgbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgaXQgY2FuIGFj Y2VwdCAobWF4aW11bQorICogY29tbWFuZHMgdGhhdCBjYW4gYmUgb3V0c3RhbmRpbmcpIGF0IGFu eSB0aW1lLiBUaGUgZHJpdmVyIG11c3QgcmVwb3J0IGEKKyAqIGxvd2VyIG51bWJlciB0byB0aGUg bWlkIGxheWVyIGJlY2F1c2UgaXQgY2FuIGlzc3VlIGEgZmV3IGludGVybmFsIGNvbW1hbmRzCisg KiBpdHNlbGYgKEUuZywgQUVOLCBhYm9ydCBjbWQsIElPQ1RMcyBldGMpLiBUaGUgbnVtYmVyIG9m IGNvbW1hbmRzIGl0IG5lZWRzCisgKiBpcyBzaG93biBiZWxvdworICovCisjZGVmaW5lIE1SU0FT X0lOVF9DTURTICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTVJTQVNfU0tJTk5Z X0lOVF9DTURTICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1SU0FTX01BWF9NU0lYX1FVRVVF UyAgICAgICAgICAgICAgICAgMTYKKworLyoKKyAqIEZXIGNhbiBhY2NlcHQgYm90aCAzMiBhbmQg NjQgYml0IFNHTHMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgMzIvNjQgYml0CisgKiBTR0xzIGJhc2Vk IG9uIHRoZSBzaXplIG9mIGJ1c19hZGRyX3QKKyAqLworI2RlZmluZSBJU19ETUE2NCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKGJ1c19hZGRyX3QpID09IDgpCisKKyNkZWZp bmUgTUZJX1hTQ0FMRV9PTVIwX0NIQU5HRV9JTlRFUlJVUFQgICAgIDB4MDAwMDAwMDEgIC8vIE1G SSBzdGF0ZSBjaGFuZ2UgaW50ZXJydXB0IAorI2RlZmluZSBNRklfSU5UUl9GTEFHX1JFUExZX01F U1NBR0UgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfSU5UUl9GTEFHX0ZJUk1XQVJF X1NUQVRFX0NIQU5HRSAgMHgwMDAwMDAwMgorI2RlZmluZSBNRklfRzJfT1VUQk9VTkRfRE9PUkJF TExfQ0hBTkdFX0lOVEVSUlVQVCAweDAwMDAwMDA0IC8vTUZJIHN0YXRlIGNoYW5nZSBpbnRlcnJ1 cHQKKworI2RlZmluZSBNRklfT0JfSU5UUl9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAgMHgw MDAwMDAwMgorI2RlZmluZSBNRklfUE9MTF9USU1FT1VUX1NFQ1MgICAgICAgICAgICAgICAgICAg NjAKKworI2RlZmluZSBNRklfUkVQTFlfMTA3OF9NRVNTQUdFX0lOVEVSUlVQVCAgICAgICAgMHg4 MDAwMDAwMAorI2RlZmluZSBNRklfUkVQTFlfR0VOMl9NRVNTQUdFX0lOVEVSUlVQVCAgICAgICAg MHgwMDAwMDAwMQorI2RlZmluZSBNRklfR0VOMl9FTkFCTEVfSU5URVJSVVBUX01BU0sgICAgICAg ICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfUkVQTFlfU0tJTk5ZX01FU1NBR0VfSU5URVJSVVBU ICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBNRklfU0tJTk5ZX0VOQUJMRV9JTlRFUlJVUFRfTUFT SyAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1GSV8xMDY4X1BDU1JfT0ZGU0VUICAgICAg ICAgICAgICAgICAgICAweDg0CisjZGVmaW5lIE1GSV8xMDY4X0ZXX0hBTkRTSEFLRV9PRkZTRVQg ICAgICAgICAgICAweDY0CisjZGVmaW5lIE1GSV8xMDY4X0ZXX1JFQURZICAgICAgICAgICAgICAg ICAgICAgICAweEREREQwMDAwCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX3NnZTMy IHsKKyAgICB1X2ludDMyX3QgcGh5c19hZGRyOworICAgIHVfaW50MzJfdCBsZW5ndGg7Cit9Owor I3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfc2dlNjQgewor ICAgIHVfaW50NjRfdCBwaHlzX2FkZHI7CisgICAgdV9pbnQzMl90IGxlbmd0aDsKK307CisjcHJh Z21hIHBhY2soKQorCisjcHJhZ21hIHBhY2soKQordW5pb24gbXJzYXNfc2dsIHsKKyAgICBzdHJ1 Y3QgbXJzYXNfc2dlMzIgc2dlMzJbMV07CisgICAgc3RydWN0IG1yc2FzX3NnZTY0IHNnZTY0WzFd OworfTsKKyNwcmFnbWEgcGFjaygpCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2hl YWRlciB7CisgICAgdV9pbnQ4X3QgY21kOyAgICAgICAgICAgICAgICAgLyowMGUgKi8KKyAgICB1 X2ludDhfdCBzZW5zZV9sZW47ICAgICAgICAgICAvKjAxaCAqLworICAgIHVfaW50OF90IGNtZF9z dGF0dXM7ICAgICAgICAgIC8qMDJoICovCisgICAgdV9pbnQ4X3Qgc2NzaV9zdGF0dXM7ICAgICAg ICAgLyowM2ggKi8KKworICAgIHVfaW50OF90IHRhcmdldF9pZDsgICAgICAgICAgIC8qMDRoICov CisgICAgdV9pbnQ4X3QgbHVuOyAgICAgICAgICAgICAgICAgLyowNWggKi8KKyAgICB1X2ludDhf dCBjZGJfbGVuOyAgICAgICAgICAgICAvKjA2aCAqLworICAgIHVfaW50OF90IHNnZV9jb3VudDsg ICAgICAgICAgIC8qMDdoICovCisKKyAgICB1X2ludDMyX3QgY29udGV4dDsgICAgICAgICAgICAv KjA4aCAqLworICAgIHVfaW50MzJfdCBwYWRfMDsgICAgICAgICAgICAgIC8qMENoICovCisKKyAg ICB1X2ludDE2X3QgZmxhZ3M7ICAgICAgICAgICAgICAvKjEwaCAqLworICAgIHVfaW50MTZfdCB0 aW1lb3V0OyAgICAgICAgICAgIC8qMTJoICovCisgICAgdV9pbnQzMl90IGRhdGFfeGZlcmxlbjsg ICAgICAgLyoxNGggKi8KK307CisjcHJhZ21hIHBhY2soKQorCisjcHJhZ21hIHBhY2soMSkKK3N0 cnVjdCBtcnNhc19pbml0X2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAg ICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFoICovCisg ICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKworICAgIHVfaW50OF90 IHJlc2VydmVkXzE7ICAgICAgICAgIC8qMDNoICovCisgICAgdV9pbnQzMl90IHJlc2VydmVkXzI7 ICAgICAgICAgLyowNGggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8q MDhoICovCisgICAgdV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAg IHVfaW50MTZfdCBmbGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHJl c2VydmVkXzM7ICAgICAgICAgLyoxMmggKi8KKyAgICB1X2ludDMyX3QgZGF0YV94ZmVyX2xlbjsg ICAgICAvKjE0aCAqLworCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9s bzsgIC8qMThoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9oaTsg IC8qMUNoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fb2xkX3BoeXNfYWRkcl9sbzsgIC8q MjBoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fb2xkX3BoeXNfYWRkcl9oaTsgIC8qMjRo ICovCisgICAgdV9pbnQzMl90IGRyaXZlcl92ZXJfbG87ICAgICAgLyoyOGggKi8KKyAgICB1X2lu dDMyX3QgZHJpdmVyX3Zlcl9oaTsgICAgICAvKjJDaCAqLworICAgIHVfaW50MzJfdCByZXNlcnZl ZF80WzRdOyAgICAgIC8qMzBoICovCit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNr KDEpCitzdHJ1Y3QgbXJzYXNfaW9fZnJhbWUgeworICAgIHVfaW50OF90IGNtZDsgICAgICAgICAg ICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3Qgc2Vuc2VfbGVuOyAgICAgICAgICAgLyowMWgg Ki8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAgICAgICAvKjAyaCAqLworICAgIHVfaW50 OF90IHNjc2lfc3RhdHVzOyAgICAgICAgIC8qMDNoICovCisKKyAgICB1X2ludDhfdCB0YXJnZXRf aWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50OF90IGFjY2Vzc19ieXRlOyAgICAgICAg IC8qMDVoICovCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMDsgICAgICAgICAgLyowNmggKi8KKyAg ICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAvKjA3aCAqLworCisgICAgdV9pbnQzMl90 IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAgICB1X2ludDMyX3QgcGFkXzA7ICAgICAg ICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90IGZsYWdzOyAgICAgICAgICAgICAgLyox MGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAgICAgICAgICAvKjEyaCAqLworICAgIHVf aW50MzJfdCBsYmFfY291bnQ7ICAgICAgICAgIC8qMTRoICovCisKKyAgICB1X2ludDMyX3Qgc2Vu c2VfYnVmX3BoeXNfYWRkcl9sbzsgICAgIC8qMThoICovCisgICAgdV9pbnQzMl90IHNlbnNlX2J1 Zl9waHlzX2FkZHJfaGk7ICAgICAvKjFDaCAqLworCisgICAgdV9pbnQzMl90IHN0YXJ0X2xiYV9s bzsgICAgICAgLyoyMGggKi8KKyAgICB1X2ludDMyX3Qgc3RhcnRfbGJhX2hpOyAgICAgICAvKjI0 aCAqLworCisgICAgdW5pb24gbXJzYXNfc2dsIHNnbDsgIC8qMjhoICovCit9OworI3ByYWdtYSBw YWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfcHRocnVfZnJhbWUgeworICAg IHVfaW50OF90IGNtZDsgICAgICAgICAgICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3Qgc2Vu c2VfbGVuOyAgICAgICAgICAgLyowMWggKi8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAg ICAgICAvKjAyaCAqLworICAgIHVfaW50OF90IHNjc2lfc3RhdHVzOyAgICAgICAgIC8qMDNoICov CisKKyAgICB1X2ludDhfdCB0YXJnZXRfaWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50 OF90IGx1bjsgICAgICAgICAgICAgICAgIC8qMDVoICovCisgICAgdV9pbnQ4X3QgY2RiX2xlbjsg ICAgICAgICAgICAgLyowNmggKi8KKyAgICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAv KjA3aCAqLworCisgICAgdV9pbnQzMl90IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAg ICB1X2ludDMyX3QgcGFkXzA7ICAgICAgICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90 IGZsYWdzOyAgICAgICAgICAgICAgLyoxMGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAg ICAgICAgICAvKjEyaCAqLworICAgIHVfaW50MzJfdCBkYXRhX3hmZXJfbGVuOyAgICAgIC8qMTRo ICovCisKKyAgICB1X2ludDMyX3Qgc2Vuc2VfYnVmX3BoeXNfYWRkcl9sbzsgICAgIC8qMThoICov CisgICAgdV9pbnQzMl90IHNlbnNlX2J1Zl9waHlzX2FkZHJfaGk7ICAgICAvKjFDaCAqLworCisg ICAgdV9pbnQ4X3QgY2RiWzE2XTsgICAgICAgICAgICAgLyoyMGggKi8KKyAgICB1bmlvbiBtcnNh c19zZ2wgc2dsOyAgLyozMGggKi8KK307CisjcHJhZ21hIHBhY2soKQorCisjcHJhZ21hIHBhY2so MSkKK3N0cnVjdCBtcnNhc19kY21kX2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAg ICAgICAgICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFo ICovCisgICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKyAgICB1X2lu dDhfdCByZXNlcnZlZF8xWzRdOyAgICAgICAvKjAzaCAqLworICAgIHVfaW50OF90IHNnZV9jb3Vu dDsgICAgICAgICAgIC8qMDdoICovCisKKyAgICB1X2ludDMyX3QgY29udGV4dDsgICAgICAgICAg ICAvKjA4aCAqLworICAgIHVfaW50MzJfdCBwYWRfMDsgICAgICAgICAgICAgIC8qMENoICovCisK KyAgICB1X2ludDE2X3QgZmxhZ3M7ICAgICAgICAgICAgICAvKjEwaCAqLworICAgIHVfaW50MTZf dCB0aW1lb3V0OyAgICAgICAgICAgIC8qMTJoICovCisKKyAgICB1X2ludDMyX3QgZGF0YV94ZmVy X2xlbjsgICAgICAvKjE0aCAqLworICAgIHVfaW50MzJfdCBvcGNvZGU7ICAgICAgICAgICAgIC8q MThoICovCisKKyAgICB1bmlvbiB7ICAgICAgICAgICAgICAgICAvKjFDaCAqLworICAgICAgICB1 X2ludDhfdCBiWzEyXTsKKyAgICAgICAgdV9pbnQxNl90IHNbNl07CisgICAgICAgIHVfaW50MzJf dCB3WzNdOworICAgIH0gbWJveDsKKworICAgIHVuaW9uIG1yc2FzX3NnbCBzZ2w7ICAvKjI4aCAq LworfTsKKyNwcmFnbWEgcGFjaygpCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2Fi b3J0X2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAgICAvKjAwaCAqLwor ICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFoICovCisgICAgdV9pbnQ4X3Qg Y21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKworICAgIHVfaW50OF90IHJlc2VydmVkXzE7 ICAgICAgICAgIC8qMDNoICovCisgICAgdV9pbnQzMl90IHJlc2VydmVkXzI7ICAgICAgICAgLyow NGggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8qMDhoICovCisgICAg dV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAgIHVfaW50MTZfdCBm bGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHJlc2VydmVkXzM7ICAg ICAgICAgLyoxMmggKi8KKyAgICB1X2ludDMyX3QgcmVzZXJ2ZWRfNDsgICAgICAgICAvKjE0aCAq LworCisgICAgdV9pbnQzMl90IGFib3J0X2NvbnRleHQ7ICAgICAgLyoxOGggKi8KKyAgICB1X2lu dDMyX3QgcGFkXzE7ICAgICAgICAgICAgICAvKjFDaCAqLworCisgICAgdV9pbnQzMl90IGFib3J0 X21maV9waHlzX2FkZHJfbG87ICAgICAvKjIwaCAqLworICAgIHVfaW50MzJfdCBhYm9ydF9tZmlf cGh5c19hZGRyX2hpOyAgICAgLyoyNGggKi8KKworICAgIHVfaW50MzJfdCByZXNlcnZlZF81WzZd OyAgICAgIC8qMjhoICovCit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitz dHJ1Y3QgbXJzYXNfc21wX2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAg ICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzE7ICAgICAgICAgIC8qMDFoICovCisg ICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKyAgICB1X2ludDhfdCBj b25uZWN0aW9uX3N0YXR1czsgICAvKjAzaCAqLworCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMlsz XTsgICAgICAgLyowNGggKi8KKyAgICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAvKjA3 aCAqLworCisgICAgdV9pbnQzMl90IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAgICB1 X2ludDMyX3QgcGFkXzA7ICAgICAgICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90IGZs YWdzOyAgICAgICAgICAgICAgLyoxMGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAgICAg ICAgICAvKjEyaCAqLworCisgICAgdV9pbnQzMl90IGRhdGFfeGZlcl9sZW47ICAgICAgLyoxNGgg Ki8KKyAgICB1X2ludDY0X3Qgc2FzX2FkZHI7ICAgICAgICAgICAvKjE4aCAqLworCisgICAgdW5p b24geworICAgICAgICBzdHJ1Y3QgbXJzYXNfc2dlMzIgc2dlMzJbMl07ICAvKiBbMF06IHJlc3Ag WzFdOiByZXEgKi8KKyAgICAgICAgc3RydWN0IG1yc2FzX3NnZTY0IHNnZTY0WzJdOyAgLyogWzBd OiByZXNwIFsxXTogcmVxICovCisgICAgfSBzZ2w7Cit9OworI3ByYWdtYSBwYWNrKCkKKworCisj cHJhZ21hIHBhY2soMSkKK3N0cnVjdCBtcnNhc19zdHBfZnJhbWUgeworICAgIHVfaW50OF90IGNt ZDsgICAgICAgICAgICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMTsgICAg ICAgICAgLyowMWggKi8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAgICAgICAvKjAyaCAq LworICAgIHVfaW50OF90IHJlc2VydmVkXzI7ICAgICAgICAgIC8qMDNoICovCisKKyAgICB1X2lu dDhfdCB0YXJnZXRfaWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50OF90IHJlc2VydmVk XzNbMl07ICAgICAgIC8qMDVoICovCisgICAgdV9pbnQ4X3Qgc2dlX2NvdW50OyAgICAgICAgICAg LyowN2ggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8qMDhoICovCisg ICAgdV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAgIHVfaW50MTZf dCBmbGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHRpbWVvdXQ7ICAg ICAgICAgICAgLyoxMmggKi8KKworICAgIHVfaW50MzJfdCBkYXRhX3hmZXJfbGVuOyAgICAgIC8q MTRoICovCisKKyAgICB1X2ludDE2X3QgZmlzWzEwXTsgICAgICAgICAgICAvKjE4aCAqLworICAg IHVfaW50MzJfdCBzdHBfZmxhZ3M7CisKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBtcnNh c19zZ2UzMiBzZ2UzMlsyXTsgIC8qIFswXTogcmVzcCBbMV06IGRhdGEgKi8KKyAgICAgICAgc3Ry dWN0IG1yc2FzX3NnZTY0IHNnZTY0WzJdOyAgLyogWzBdOiByZXNwIFsxXTogZGF0YSAqLworICAg IH0gc2dsOworfTsKKyNwcmFnbWEgcGFjaygpCisKK3VuaW9uIG1yc2FzX2ZyYW1lIHsKKyAgICBz dHJ1Y3QgbXJzYXNfaGVhZGVyIGhkcjsKKyAgICBzdHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSBpbml0 OworICAgIHN0cnVjdCBtcnNhc19pb19mcmFtZSBpbzsKKyAgICBzdHJ1Y3QgbXJzYXNfcHRocnVf ZnJhbWUgcHRocnU7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgZGNtZDsKKyAgICBzdHJ1 Y3QgbXJzYXNfYWJvcnRfZnJhbWUgYWJvcnQ7CisgICAgc3RydWN0IG1yc2FzX3NtcF9mcmFtZSBz bXA7CisgICAgc3RydWN0IG1yc2FzX3N0cF9mcmFtZSBzdHA7CisgICAgdV9pbnQ4X3QgcmF3X2J5 dGVzWzY0XTsKK307CisKKyNwcmFnbWEgcGFjaygxKQordW5pb24gbXJzYXNfZXZ0X2NsYXNzX2xv Y2FsZSB7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICB1X2ludDE2X3QgbG9j YWxlOworICAgICAgICAgICAgICAgIHVfaW50OF90IHJlc2VydmVkOworICAgICAgICAgICAgICAg IGludDhfdCBjbGFzczsKKyAgICAgICAgfSBfX3BhY2tlZCBtZW1iZXJzOworICAgICAgICAKKyAg ICAgICAgdV9pbnQzMl90IHdvcmQ7CisgICAgICAgICAgICAgICAgCit9IF9fcGFja2VkOworCisj cHJhZ21hIHBhY2soKQorCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2V2dF9sb2df aW5mbyB7CisgICAgICAgIHVfaW50MzJfdCBuZXdlc3Rfc2VxX251bTsKKyAgICAgICAgdV9pbnQz Ml90IG9sZGVzdF9zZXFfbnVtOworICAgICAgICB1X2ludDMyX3QgY2xlYXJfc2VxX251bTsKKyAg ICAgICAgdV9pbnQzMl90IHNodXRkb3duX3NlcV9udW07CisgICAgICAgIHVfaW50MzJfdCBib290 X3NlcV9udW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK30gX19wYWNr ZWQ7CisKKyNwcmFnbWEgcGFjaygpCisKK3N0cnVjdCBtcnNhc19wcm9ncmVzcyB7CisKKwl1X2lu dDE2X3QgcHJvZ3Jlc3M7CisJdV9pbnQxNl90IGVsYXBzZWRfc2Vjb25kczsKKworfSBfX3BhY2tl ZDsKKworc3RydWN0IG1yc2FzX2V2dGFyZ19sZCB7CisKKwl1X2ludDE2X3QgdGFyZ2V0X2lkOwor CXVfaW50OF90IGxkX2luZGV4OworCXVfaW50OF90IHJlc2VydmVkOworCit9IF9fcGFja2VkOwor CitzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3BkIHsKKwl1X2ludDE2X3QgZGV2aWNlX2lkOworCXVfaW50 OF90IGVuY2xfaW5kZXg7CisJdV9pbnQ4X3Qgc2xvdF9udW1iZXI7CisKK30gX19wYWNrZWQ7CisK K3N0cnVjdCBtcnNhc19ldnRfZGV0YWlsIHsKKworCXVfaW50MzJfdCBzZXFfbnVtOworCXVfaW50 MzJfdCB0aW1lX3N0YW1wOworCXVfaW50MzJfdCBjb2RlOworCXVuaW9uIG1yc2FzX2V2dF9jbGFz c19sb2NhbGUgY2w7CisJdV9pbnQ4X3QgYXJnX3R5cGU7CisJdV9pbnQ4X3QgcmVzZXJ2ZWQxWzE1 XTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7 CisJCQl1X2ludDhfdCBjZGJfbGVuZ3RoOworCQkJdV9pbnQ4X3Qgc2Vuc2VfbGVuZ3RoOworCQkJ dV9pbnQ4X3QgcmVzZXJ2ZWRbMl07CisJCQl1X2ludDhfdCBjZGJbMTZdOworCQkJdV9pbnQ4X3Qg c2Vuc2VbNjRdOworCQl9IF9fcGFja2VkIGNkYlNlbnNlOworCisJCXN0cnVjdCBtcnNhc19ldnRh cmdfbGQgbGQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJ CQl1X2ludDY0X3QgY291bnQ7CisJCX0gX19wYWNrZWQgbGRfY291bnQ7CisKKwkJc3RydWN0IHsK KwkJCXVfaW50NjRfdCBsYmE7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX2xkIGxkOworCQl9IF9f cGFja2VkIGxkX2xiYTsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBs ZDsKKwkJCXVfaW50MzJfdCBwcmV2T3duZXI7CisJCQl1X2ludDMyX3QgbmV3T3duZXI7CisJCX0g X19wYWNrZWQgbGRfb3duZXI7CisKKwkJc3RydWN0IHsKKwkJCXVfaW50NjRfdCBsZF9sYmE7CisJ CQl1X2ludDY0X3QgcGRfbGJhOworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXN0 cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7CisJCX0gX19wYWNrZWQgbGRfbGJhX3BkX2xiYTsKKwor CQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXN0cnVjdCBtcnNh c19wcm9ncmVzcyBwcm9nOworCQl9IF9fcGFja2VkIGxkX3Byb2c7CisKKwkJc3RydWN0IHsKKwkJ CXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJCQl1X2ludDMyX3QgcHJldl9zdGF0ZTsKKwkJ CXVfaW50MzJfdCBuZXdfc3RhdGU7CisJCX0gX19wYWNrZWQgbGRfc3RhdGU7CisKKwkJc3RydWN0 IHsKKwkJCXVfaW50NjRfdCBzdHJpcDsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJ CX0gX19wYWNrZWQgbGRfc3RyaXA7CisKKwkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwor CQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwkJCXVfaW50MzJfdCBl cnI7CisJCX0gX19wYWNrZWQgcGRfZXJyOworCisJCXN0cnVjdCB7CisJCQl1X2ludDY0X3QgbGJh OworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwkJfSBfX3BhY2tlZCBwZF9sYmE7CisK KwkJc3RydWN0IHsKKwkJCXVfaW50NjRfdCBsYmE7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3Bk IHBkOworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJfSBfX3BhY2tlZCBwZF9sYmFf bGQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7CisJCQlzdHJ1 Y3QgbXJzYXNfcHJvZ3Jlc3MgcHJvZzsKKwkJfSBfX3BhY2tlZCBwZF9wcm9nOworCisJCXN0cnVj dCB7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3BkIHBkOworCQkJdV9pbnQzMl90IHByZXZTdGF0 ZTsKKwkJCXVfaW50MzJfdCBuZXdTdGF0ZTsKKwkJfSBfX3BhY2tlZCBwZF9zdGF0ZTsKKworCQlz dHJ1Y3QgeworCQkJdV9pbnQxNl90IHZlbmRvcklkOworCQkJdV9pbnQxNl90IGRldmljZUlkOwor CQkJdV9pbnQxNl90IHN1YlZlbmRvcklkOworCQkJdV9pbnQxNl90IHN1YkRldmljZUlkOworCQl9 IF9fcGFja2VkIHBjaTsKKworCQl1X2ludDMyX3QgcmF0ZTsKKwkJY2hhciBzdHJbOTZdOworCisJ CXN0cnVjdCB7CisJCQl1X2ludDMyX3QgcnRjOworCQkJdV9pbnQzMl90IGVsYXBzZWRTZWNvbmRz OworCQl9IF9fcGFja2VkIHRpbWU7CisKKwkJc3RydWN0IHsKKwkJCXVfaW50MzJfdCBlY2FyOwor CQkJdV9pbnQzMl90IGVsb2c7CisJCQljaGFyIHN0cls2NF07CisJCX0gX19wYWNrZWQgZWNjOwor CisJCXVfaW50OF90IGJbOTZdOworCQl1X2ludDE2X3Qgc1s0OF07CisJCXVfaW50MzJfdCB3WzI0 XTsKKwkJdV9pbnQ2NF90IGRbMTJdOworCX0gYXJnczsKKworCWNoYXIgZGVzY3JpcHRpb25bMTI4 XTsKKworfSBfX3BhY2tlZDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcGVyLWluc3RhbmNlIGRhdGEK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KK3N0cnVjdCBtcnNhc19zb2Z0YyB7CisgICAgZGV2aWNlX3QgICAgICAg ICAgIG1yc2FzX2RldjsgICAgICAgICAvLyBidXMgZGV2aWNlCisgICAgc3RydWN0IGNkZXYgICAg ICAgICptcnNhc19jZGV2OyAgICAgICAvLyBjb250cm9sbGVyIGRldmljZQorICAgIHVpbnQxNl90 ICAgICAgICAgICBkZXZpY2VfaWQ7ICAgICAgICAgLy8gcGNpIGRldmljZQorICAgIHN0cnVjdCBy ZXNvdXJjZSAgICAqcmVnX3JlczsgICAgICAgICAgLy8gcmVnaXN0ZXIgaW50ZXJmYWNlIHdpbmRv dworICAgIGludCAgICAgICAgICAgICAgICByZWdfcmVzX2lkOyAgICAgICAgLy8gcmVnaXN0ZXIg cmVzb3VyY2UgaWQKKyAgICBidXNfc3BhY2VfdGFnX3QgICAgYnVzX3RhZzsgICAgICAgICAgIC8v IGJ1cyBzcGFjZSB0YWcKKyAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnVzX2hhbmRsZTsgICAgICAg IC8vIGJ1cyBzcGFjZSBoYW5kbGUKKyAgICBidXNfZG1hX3RhZ190ICAgICAgbXJzYXNfcGFyZW50 X3RhZzsgIC8vIGJ1cyBkbWEgcGFyZW50IHRhZworICAgIGJ1c19kbWFfdGFnX3QgICAgICB2ZXJi dWZfdGFnOyAgICAgICAgLy8gdmVyYnVmIHRhZworICAgIGJ1c19kbWFtYXBfdCAgICAgICB2ZXJi dWZfZG1hbWFwOyAgICAgLy8gdmVyYnVmIGRtYW1hcAorICAgIHZvaWQgICAgICAgICAgICAgICAq dmVyYnVmX21lbTsgICAgICAgIC8vIHZlcmJ1ZiBtZW0KKyAgICBidXNfYWRkcl90ICAgICAgICAg dmVyYnVmX3BoeXNfYWRkcjsgICAvLyB2ZXJidWYgcGh5c2ljYWwgYWRkcgorICAgIGJ1c19kbWFf dGFnX3QgICAgICBzZW5zZV90YWc7ICAgICAgICAgLy8gYnVzIGRtYSB2ZXJidWYgdGFnCisgICAg YnVzX2RtYW1hcF90ICAgICAgIHNlbnNlX2RtYW1hcDsgICAgICAvLyBidXMgZG1hIHZlcmJ1ZiBk bWFtYXAKKyAgICB2b2lkICAgICAgICAgICAgICAgKnNlbnNlX21lbTsgICAgICAgIC8vIHBvaW50 ZXIgdG8gc2Vuc2UgYnVmCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHNlbnNlX3BoeXNfYWRkcjsg ICAgLy8gYnVzIGRtYSB2ZXJidWYgbWVtCisgICAgYnVzX2RtYV90YWdfdCAgICAgIGlvX3JlcXVl c3RfdGFnOyAgICAvLyBidXMgZG1hIGlvIHJlcXVlc3QgdGFnCisgICAgYnVzX2RtYW1hcF90ICAg ICAgIGlvX3JlcXVlc3RfZG1hbWFwOyAvLyBidXMgZG1hIGlvIHJlcXVlc3QgZG1hbWFwCisgICAg dm9pZCAgICAgICAgICAgICAgICppb19yZXF1ZXN0X21lbTsgICAvLyBidXMgZG1hIGlvIHJlcXVl c3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGlvX3JlcXVlc3RfcGh5c19hZGRyOyAvLyBp byByZXF1ZXN0IHBoeXNpY2FsIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAgY2hhaW5f ZnJhbWVfdGFnOyAgICAvLyBidXMgZG1hIGNoYWluIGZyYW1lIHRhZworICAgIGJ1c19kbWFtYXBf dCAgICAgICBjaGFpbl9mcmFtZV9kbWFtYXA7IC8vIGJ1cyBkbWEgY2hhaW4gZnJhbWUgZG1hbWFw CisgICAgdm9pZCAgICAgICAgICAgICAgICpjaGFpbl9mcmFtZV9tZW07ICAgLy8gYnVzIGRtYSBj aGFpbiBmcmFtZSBtZW0KKyAgICBidXNfYWRkcl90ICAgICAgICAgY2hhaW5fZnJhbWVfcGh5c19h ZGRyOyAvLyBjaGFpbiBmcmFtZSBwaHlzIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAg cmVwbHlfZGVzY190YWc7ICAgIC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCB0YWcKKyAgICBidXNfZG1h bWFwX3QgICAgICAgcmVwbHlfZGVzY19kbWFtYXA7IC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCBkbWFt YXAKKyAgICB2b2lkICAgICAgICAgICAgICAgKnJlcGx5X2Rlc2NfbWVtOyAgICAvLyBidXMgZG1h IGlvIHJlcXVlc3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJlcGx5X2Rlc2NfcGh5c19h ZGRyOyAvLyBidXMgZG1hIGlvIHJlcXVlc3QgbWVtCisgICAgYnVzX2RtYV90YWdfdCAgICAgIGlv Y19pbml0X3RhZzsgICAgLy8gYnVzIGRtYSBpbyByZXF1ZXN0IHRhZworICAgIGJ1c19kbWFtYXBf dCAgICAgICBpb2NfaW5pdF9kbWFtYXA7IC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCBkbWFtYXAKKyAg ICB2b2lkICAgICAgICAgICAgICAgKmlvY19pbml0X21lbTsgICAvLyBidXMgZG1hIGlvIHJlcXVl c3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGlvY19pbml0X3BoeXNfbWVtOyAvLyBpbyBy ZXF1ZXN0IHBoeXNpY2FsIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAgZGF0YV90YWc7 ICAgICAgICAgIC8vIGJ1cyBkbWEgZGF0YSBmcm9tIE9TIHRhZworICAgIHN0cnVjdCBjYW1fc2lt ICAgICAqc2ltXzA7ICAgICAgICAgICAgLy8gU0lNIHBvaW50ZXIKKyAgICBzdHJ1Y3QgY2FtX3Np bSAgICAgKnNpbV8xOyAgICAgICAgICAgIC8vIFNJTSBwb2ludGVyCisgICAgc3RydWN0IGNhbV9w YXRoICAgICpwYXRoXzA7ICAgICAgICAgICAvLyBsZGlvIHBhdGggcG9pbnRlciB0byBDQU0KKyAg ICBzdHJ1Y3QgY2FtX3BhdGggICAgKnBhdGhfMTsgICAgICAgICAgIC8vIHN5c3BkIHBhdGggcG9p bnRlciB0byBDQU0KKyAgICBzdHJ1Y3QgbXR4IHNpbV9sb2NrOyAgICAgICAgICAgICAgICAgIC8v IHNpbSBsb2NrCisgICAgc3RydWN0IG10eCBwY2lfbG9jazsgICAgICAgICAgICAgICAgICAvLyBz ZXJpYWxpemUgcGNpIGFjY2VzcworICAgIHN0cnVjdCBtdHggaW9fbG9jazsgICAgICAgICAgICAg ICAgICAgLy8gSU8gbG9jaworICAgIHN0cnVjdCBtdHggaW9jdGxfbG9jazsgICAgICAgICAgICAg ICAgLy8gSU9DVEwgbG9jaworICAgIHN0cnVjdCBtdHggbXB0X2NtZF9wb29sX2xvY2s7ICAgICAg ICAgLy8gbG9jayBmb3IgY21kIHBvb2wgbGlua2VkIGxpc3QKKyAgICBzdHJ1Y3QgbXR4IG1maV9j bWRfcG9vbF9sb2NrOyAgICAgICAgIC8vIGxvY2sgZm9yIGNtZCBwb29sIGxpbmtlZCBsaXN0Cisg ICAgc3RydWN0IG10eCByYWlkbWFwX2xvY2s7ICAgICAgICAgICAgICAvLyBsb2NrIGZvciByYWlk IG1hcCBhY2Nlc3MvdXBkYXRlCisgICAgc3RydWN0IG10eCBhZW5fbG9jazsgICAgICAgICAgICAg ICAgICAvLyBhZW4gbG9jaworICAgIHVpbnQzMl90ICAgICAgICAgICBtYXhfZndfY21kczsgICAg ICAgLy8gTWF4IGNvbW1hbmRzIGZyb20gRlcKKyAgICB1aW50MzJfdCAgICAgICAgICAgbWF4X251 bV9zZ2U7ICAgICAgIC8vIE1heCBudW1iZXIgb2YgU0dFcworICAgIHN0cnVjdCByZXNvdXJjZSAg ICAqbXJzYXNfaXJxOyAgICAgICAgLy8gaW50ZXJydXB0IGludGVyZmFjZSB3aW5kb3cKKyAgICB2 b2lkICAgICAgICAgICAgICAgKmludHJfaGFuZGxlOyAgICAgIC8vIGhhbmRsZQorICAgIGludCAg ICAgICAgICAgICAgICBpcnFfaWQ7ICAgICAgICAgICAgLy8gaW50ciByZXNvdXJjZSBpZAorICAg IHN0cnVjdCBtcnNhc19tcHRfY21kICAgKiptcHRfY21kX2xpc3Q7CisgICAgc3RydWN0IG1yc2Fz X21maV9jbWQgICAqKm1maV9jbWRfbGlzdDsKKyAgICBUQUlMUV9IRUFEKCwgbXJzYXNfbXB0X2Nt ZCkgbXJzYXNfbXB0X2NtZF9saXN0X2hlYWQ7CisgICAgVEFJTFFfSEVBRCgsIG1yc2FzX21maV9j bWQpIG1yc2FzX21maV9jbWRfbGlzdF9oZWFkOworICAgIGJ1c19hZGRyX3QgICAgICAgICByZXFf ZnJhbWVzX2Rlc2NfcGh5czsKKyAgICB1X2ludDhfdCAgICAgICAgICAgKnJlcV9mcmFtZXNfZGVz YzsKKyAgICB1X2ludDhfdCAgICAgICAgICAgKnJlcV9kZXNjOworICAgIGJ1c19hZGRyX3QgICAg ICAgICBpb19yZXF1ZXN0X2ZyYW1lc19waHlzOworICAgIHVfaW50OF90ICAgICAgICAgICAqaW9f cmVxdWVzdF9mcmFtZXM7CisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJlcGx5X2ZyYW1lc19kZXNj X3BoeXM7CisgICAgdV9pbnQxNl90ICAgICAgICAgIGxhc3RfcmVwbHlfaWR4OworICAgIHVfaW50 MzJfdCAgICAgICAgICByZXBseV9xX2RlcHRoOworICAgIHVfaW50MzJfdCAgICAgICAgICByZXF1 ZXN0X2FsbG9jX3N6OworICAgIHVfaW50MzJfdCAgICAgICAgICByZXBseV9hbGxvY19zejsKKyAg ICB1X2ludDMyX3QgICAgICAgICAgaW9fZnJhbWVzX2FsbG9jX3N6OworICAgIHVfaW50MzJfdCAg ICAgICAgICBjaGFpbl9mcmFtZXNfYWxsb2Nfc3o7CisgICAgdV9pbnQxNl90ICAgICAgICAgIG1h eF9zZ2VfaW5fbWFpbl9tc2c7CisgICAgdV9pbnQxNl90ICAgICAgICAgIG1heF9zZ2VfaW5fY2hh aW47CisgICAgdV9pbnQ4X3QgICAgICAgICAgIGNoYWluX29mZnNldF9pb19yZXF1ZXN0OworICAg IHVfaW50OF90ICAgICAgICAgICBjaGFpbl9vZmZzZXRfbWZpX3B0aHJ1OworICAgIHVfaW50MzJf dCAgICAgICAgICBtYXBfc3o7CisgICAgdV9pbnQ2NF90ICAgICAgICAgIG1hcF9pZDsKKyAgICBz dHJ1Y3QgbXJzYXNfbWZpX2NtZCAqbWFwX3VwZGF0ZV9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21m aV9jbWQgKmFlbl9jbWQ7CQorICAgIHVfaW50OF90ICAgICAgICAgICBmYXN0X3BhdGhfaW87Cisg ICAgdm9pZCogICAgICAgICAgICAgIGNoYW47CisgICAgdm9pZCogICAgICAgICAgICAgIG9jcl9j aGFuOworICAgIHVfaW50OF90ICAgICAgICAgICBhZHByZWNvdmVyeTsKKyAgICB1X2ludDhfdCAg ICAgICAgICAgcmVtb3ZlX2luX3Byb2dyZXNzOworICAgIHVfaW50OF90ICAgICAgICAgICBvY3Jf dGhyZWFkX2FjdGl2ZTsKKyAgICB1X2ludDhfdCAgICAgICAgICAgZG9fdGltZWRvdXRfcmVzZXQ7 CisgICAgdV9pbnQzMl90ICAgICAgICAgIHJlc2V0X2luX3Byb2dyZXNzOworICAgIHVfaW50MzJf dCAgICAgICAgICByZXNldF9jb3VudDsKKyAgICBidXNfZG1hX3RhZ190ICAgICAgcmFpZG1hcF90 YWdbMl07ICAgIC8vIGJ1cyBkbWEgdGFnIGZvciBSQUlEIG1hcAorICAgIGJ1c19kbWFtYXBfdCAg ICAgICByYWlkbWFwX2RtYW1hcFsyXTsgLy8gYnVzIGRtYSBkbWFtYXAgUkFJRCBtYXAKKyAgICB2 b2lkICAgICAgICAgICAgICAgKnJhaWRtYXBfbWVtWzJdOyAgIC8vIGJ1cyBkbWEgbWVtIFJBSUQg bWFwCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJhaWRtYXBfcGh5c19hZGRyWzJdOyAvLyBSQUlE IG1hcCBwaHlzaWNhbCBhZGRyZXNzCisgICAgYnVzX2RtYV90YWdfdCAgICAgIG1maWNtZF9mcmFt ZV90YWc7ICAgICAgLy8gdGFnIGZvciBtZmkgZnJhbWUKKyAgICBidXNfZG1hX3RhZ190ICAgICAg bWZpY21kX3NlbnNlX3RhZzsgICAgICAvLyB0YWcgZm9yIG1maSBzZW5zZQorICAgIGJ1c19kbWFf dGFnX3QgICAgICBldnRfZGV0YWlsX3RhZzsgICAgICAgIC8vIGV2ZW50IGRldGFpbCB0YWcKKyAg ICBidXNfZG1hbWFwX3QgICAgICAgZXZ0X2RldGFpbF9kbWFtYXA7ICAgICAvLyBldmVudCBkZXRh aWwgZG1hbWFwCisgICAgc3RydWN0IG1yc2FzX2V2dF9kZXRhaWwgICAqZXZ0X2RldGFpbF9tZW07 ICAgICAgICAvLyBldmVudCBkZXRhaWwgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGV2dF9k ZXRhaWxfcGh5c19hZGRyOyAgIC8vIGV2ZW50IGRldGFpbCBwaHlzaWNhbCBhZGRyCisgICAgYnVz X2RtYV90YWdfdCAgICAgIGN0bHJfaW5mb190YWc7ICAgIC8vIHRhZyBmb3IgZ2V0IGN0bHIgaW5m byBjbWQKKyAgICBidXNfZG1hbWFwX3QgICAgICAgY3Rscl9pbmZvX2RtYW1hcDsgLy8gZ2V0IGN0 bHIgaW5mbyBjbWQgZG1hbWFwCisgICAgdm9pZCAgICAgICAgICAgICAgICpjdGxyX2luZm9fbWVt OyAgIC8vIGdldCBjdGxyIGluZm8gY21kIHZpcnR1YWwgYWRkcgorICAgIGJ1c19hZGRyX3QgICAg ICAgICBjdGxyX2luZm9fcGh5c19hZGRyOyAvL2dldCBjdGxyIGluZm8gY21kIHBoeXNpY2FsIGFk ZHIKKyAgICB1X2ludDMyX3QgICAgICAgICAgbWF4X3NlY3RvcnNfcGVyX3JlcTsKKyAgICB1X2lu dDhfdCAgICAgICAgICAgZGlzYWJsZU9ubGluZUN0cmxSZXNldDsKKyAgICBhdG9taWNfdCAgICAg ICAgICAgZndfb3V0c3RhbmRpbmc7CisgICAgdV9pbnQzMl90ICAgICAgICAgIG1yc2FzX2RlYnVn OworICAgIHVfaW50MzJfdCAgICAgICAgICBtcnNhc19pb190aW1lb3V0OworICAgIHVfaW50MzJf dCAgICAgICAgICBtcnNhc19md19mYXVsdF9jaGVja19kZWxheTsgCisgICAgdV9pbnQzMl90ICAg ICAgICAgIGlvX2NtZHNfaGlnaHdhdGVyOyAKKyAgICB1X2ludDMyX3QgICAgICAgICAgbXJzYXNf bGRpb19kZXB0aDsKKyAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICAgc3lzY3RsX2N0eDsKKyAg ICBzdHJ1Y3Qgc3lzY3RsX29pZCAgICAgICAgKnN5c2N0bF90cmVlOworICAgIHN0cnVjdCBwcm9j ICAgICAgICAgICAgICAqb2NyX3RocmVhZDsKKyAgICB1X2ludDMyX3QJbGFzdF9zZXFfbnVtOwor ICAgIGJ1c19kbWFfdGFnX3QgICAgICBlbF9pbmZvX3RhZzsgICAgLy8gdGFnIGZvciBnZXQgZXZl bnQgbG9nIGluZm8gY21kCisgICAgYnVzX2RtYW1hcF90ICAgICAgIGVsX2luZm9fZG1hbWFwOyAv LyBnZXQgZXZlbnQgbG9nIGluZm8gY21kIGRtYW1hcAorICAgIHZvaWQgICAgICAgICAgICAgICAq ZWxfaW5mb19tZW07ICAgLy8gZ2V0IGV2ZW50IGxvZyBpbmZvIGNtZCB2aXJ0dWFsIGFkZHIKKyAg ICBidXNfYWRkcl90ICAgICAgICAgZWxfaW5mb19waHlzX2FkZHI7IC8vZ2V0IGV2ZW50IGxvZyBp bmZvIGNtZCBwaHlzaWNhbCBhZGRyCisgICAgc3RydWN0IG1yc2FzX3BkX2xpc3QgcGRfbGlzdFtN UlNBU19NQVhfUERdOworICAgIHVfaW50OF90ICAgICAgICAgICBsZF9pZHNbTVJTQVNfTUFYX0xE XTsKKyAgICBzdHJ1Y3QgdGFza3F1ZXVlICAgICpldl90cTsJLy90YXNrcXVldWUgZm9yIGV2ZW50 cworICAgIHN0cnVjdCB0YXNrICAgICAJZXZfdGFzazsKKyAgICB1X2ludDMyX3QgICAgICAgICAg Q3VyTGRDb3VudDsKKyAgICB1X2ludDY0X3QgICAgICAgICAgcmVzZXRfZmxhZ3M7CisgICAgTERf TE9BRF9CQUxBTkNFX0lORk8gbG9hZF9iYWxhbmNlX2luZm9bTUFYX0xPR0lDQUxfRFJJVkVTXTsK K307CisKKy8qIENvbXBhdGliaWxpdHkgc2hpbXMgZm9yIGRpZmZlcmVudCBPUyB2ZXJzaW9ucyAq LworI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMQorI2RlZmluZSBtcnNhc19rcHJvY19j cmVhdGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3BncywgZm10c3RyLCBhcmcp IFwKKyAgICBrcHJvY19jcmVhdGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3Bn cywgZm10c3RyLCBhcmcpCisjZGVmaW5lIG1yc2FzX2twcm9jX2V4aXQoYXJnKSAgIGtwcm9jX2V4 aXQoYXJnKQorI2Vsc2UKKyNkZWZpbmUgbXJzYXNfa3Byb2NfY3JlYXRlKGZ1bmMsIGZhcmcsIHBy b2NfcHRyLCBmbGFncywgc3RhY2twZ3MsIGZtdHN0ciwgYXJnKSBcCisgICAga3RocmVhZF9jcmVh dGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3BncywgZm10c3RyLCBhcmcpCisj ZGVmaW5lIG1yc2FzX2twcm9jX2V4aXQoYXJnKSAgIGt0aHJlYWRfZXhpdChhcmcpCisjZW5kaWYK Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZWFyX2JpdChpbnQgYiwgdm9sYXRpbGUgdm9pZCAq cCkKK3sKKyAgICBhdG9taWNfY2xlYXJfaW50KCgodm9sYXRpbGUgaW50ICopcCkgKyAoYiA+PiA1 KSwgMSA8PCAoYiAmIDB4MWYpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK3NldF9iaXQo aW50IGIsIHZvbGF0aWxlIHZvaWQgKnApCit7CisgICAgYXRvbWljX3NldF9pbnQoKCh2b2xhdGls ZSBpbnQgKilwKSArIChiID4+IDUpLCAxIDw8IChiICYgMHgxZikpOworfQorCitzdGF0aWMgX19p bmxpbmUgaW50Cit0ZXN0X2JpdChpbnQgYiwgdm9sYXRpbGUgdm9pZCAqcCkKK3sKKyAgICByZXR1 cm4gKCh2b2xhdGlsZSBpbnQgKilwKVtiID4+IDVdICYgKDEgPDwgKGIgJiAweDFmKSk7Cit9CisK KyNlbmRpZiAgLyogTVJTQVNfSCAqLwpJbmRleDogc3lzL2Rldi9tZmkvbWZpX3BjaS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHN5cy9kZXYvbWZpL21maV9wY2kuYwkocmV2aXNpb24gMjQ5OTIwKQorKysgc3lz L2Rldi9tZmkvbWZpX3BjaS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCwyNCBAQAog bWZpX3BjaV9wcm9iZShkZXZpY2VfdCBkZXYpCiB7CiAJc3RydWN0IG1maV9pZGVudCAqaWQ7CisJ dW5zaWduZWQgaW50IG1yc2FzX2ZvcmNlID0gMCwgaXZhcjsKIAogCWlmICgoaWQgPSBtZmlfZmlu ZF9pZGVudChkZXYpKSAhPSBOVUxMKSB7Ci0JCWRldmljZV9zZXRfZGVzYyhkZXYsIGlkLT5kZXNj KTsKLQkJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CisJCWlmIChpZC0+ZGV2aWNlID09IDB4 MDA1YiB8fCBpZC0+ZGV2aWNlID09IDB4MDA1ZCkgeworICAgICAgICAgICAgcmVzb3VyY2VfaW50 X3ZhbHVlKCJtcnNhcyIsIDAsICJmdXNpb25fZm9yY2UiLCAmaXZhcik7CisKKwkJCWlmIChpdmFy ID09IDAgfHwgaXZhciA9PSAxKQorCQkgICAgICAgICAgICBtcnNhc19mb3JjZSA9IGl2YXI7ICAK KworICAgICAgICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAg ICAgaWYgKG1yc2FzX2ZvcmNlKQorICAgICAgICAgICAgICAgIHJldHVybiAoQlVTX1BST0JFX0xP V19QUklPUklUWSk7IC8vIGdpdmUgcHJpb3JpdHkgdG8gbXJzYXMKKyAgICAgICAgICAgIGVsc2Ug CisgICAgICAgICAgICAJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSAKKyAgICAgICAgICAgIGRldmljZV9zZXRfZGVzYyhkZXYsIGlkLT5kZXNjKTsK KyAgICAgICAgICAgIHJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOwogCX0KIAlyZXR1cm4gKEVO WElPKTsKIH0K --_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?08ba2a262fba45f687cdd3225f325110>