From: Jun Kamada Subject: [PATCH 2/5] pvSCSI (SCSI pass through) driver Date: Fri, 19 Oct 2007 14:15:36 +0900 Message-ID: <20071019135901.E768.KAMA@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------_4718399500000000E8B0_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: kama@jp.fujitsu.com List-Id: xen-devel@lists.xenproject.org --------_4718399500000000E8B0_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This patch is for backend driver. Signed-off-by: Tomonari Horikoshi Signed-off-by: Tsunehisa Doi Signed-off-by: Jun Kamada Signed-off-by: Akira Hayakawa ----- Jun Kamada --------_4718399500000000E8B0_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="linux_scsiback.patch" Content-Disposition: attachment; filename="linux_scsiback.patch" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHQuaG9yaWtvc2hpQGpwLmZ1aml0c3UuY29tCiMg RGF0ZSAxMTkyNzAwODczIC0zMjQwMAojIE5vZGUgSUQgN2ZkNDkyOWY2YjIxYzg5MGI4ODIyNjM4 NjUyN2Q4NTY5NmRlZTZlMwojIFBhcmVudCAgOWJmMWRkZDBmNmJmNTc2ODRjNWIwMzA3YTQzZWEz ODFjNDVmNTE0NwpbTElOVVhdW3Njc2liYWNrXSBhZGQgc2NzaSBiYWNrZW5kIGRyaXZlcgoKU2ln bmVkLW9mZi1ieTogVG9tb25hcmkgSG9yaWtvc2hpIDx0Lmhvcmlrb3NoaUBqcC5mdWppdHN1LmNv bT4KU2lnbmVkLW9mZi1ieTogVHN1bmVoaXNhIERvaSA8RG9pLlRzdW5laGlzYUBqcC5mdWppdHN1 LmNvbT4KU2lnbmVkLW9mZi1ieTogSnVuIEthbWFkYSA8a2FtYUBqcC5mdWppdHN1LmNvbT4KU2ln bmVkLW9mZi1ieTogQWtpcmEgSGF5YWthd2EgPGhheWFrYXdhLmFraXJhQGpwLmZ1aml0c3UuY29t PgoKCmRpZmYgLXIgOWJmMWRkZDBmNmJmIC1yIDdmZDQ5MjlmNmIyMSBkcml2ZXJzL3hlbi9zY3Np YmFjay9NYWtlZmlsZQotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAw MAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9NYWtlZmlsZQlUaHUgT2N0IDE4IDE4OjQ3OjUz IDIwMDcgKzA5MDAKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfWEVOX1NDU0lfQkFDS0VO RCkJKz0geGVuLXNjc2liay5vCit4ZW4tc2NzaWJrLXkJCQkrPSBpbnRlcmZhY2UubyBzY3NpYmFj ay5vIHhlbmJ1cy5vIGNvbWJhY2subyB0cmFjZWJhY2subwpkaWZmIC1yIDliZjFkZGQwZjZiZiAt ciA3ZmQ0OTI5ZjZiMjEgZHJpdmVycy94ZW4vc2NzaWJhY2svY29tYmFjay5jCi0tLSAvZGV2L251 bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2li YWNrL2NvbWJhY2suYwlUaHUgT2N0IDE4IDE4OjQ3OjUzIDIwMDcgKzA5MDAKQEAgLTAsMCArMSwy NzQgQEAKKy8qCisgKiBYZW4gU0NTSSBiYWNrZW5kIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAo YykgMjAwNywgRlVKSVRTVSBMaW1pdGVkCisgKgorICogQmFzZWQgb24gdGhlIGJsa2JhY2sgZHJp dmVyIGNvZGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0ZWQKKyAq IHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvIG90 aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vu c2U6CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc291cmNlIGZpbGUg KHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P IEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxz Y3NpL3Njc2lfZGV2aWNlLmg+CisjaWZkZWYgQ09ORklHX1hFTl9GQworI2luY2x1ZGUgPHNjc2kv c2NzaV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+Cisj ZW5kaWYKKworI2luY2x1ZGUgImNvbWJhY2suaCIKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQg cGVuZGluZ19mcmVlOworZXh0ZXJuIGludCB2c2NzaWlmX3JlcXM7CisKK3N0YXRpYyBERUZJTkVf U1BJTkxPQ0socGVuZGluZ19mcmVlX2xvY2spOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9I RUFEKHBlbmRpbmdfZnJlZV93cSk7CisKK2V4dGVybiB2b2lkIHNjc2liYWNrX2NtZF9leGVjKHBl bmRpbmdfcmVxX3QgKik7CitleHRlcm4gaW50IGNvcHlfcmVxdWVzdF9yaW5nX2luZm8oc3RydWN0 IGNvbWJhY2tfaW5mbyAqLAorCQlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCAqLCBwZW5kaW5n X3JlcV90ICopOworZXh0ZXJuIHZvaWQgc2NzaWJhY2tfcmVzZXRfZXhlYyhwZW5kaW5nX3JlcV90 ICopOworZXh0ZXJuIHZvaWQgc2NzaV90cmFjZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFy ICosIHVuc2lnbmVkIGludCk7CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCitleHRlcm4gdm9pZCBm Y2JhY2tfY21kX2V4ZWMocGVuZGluZ19yZXFfdCAqKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBy ZWFkX2J0Zl9yaW5nX3Jlc3BfY29ucyhzdHJ1Y3QgY29tYmFja19pbmZvICppbmZvKTsKKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisvKiAJZm9yIGZyb250ZW5kIHRvIGJhY2tlbmQgY29tbXVuaWNhdGlvbgkJCQkJCSov CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gKi8KKworc3RhdGljIHBlbmRpbmdfcmVxX3QgKiBhbGxvY19yZXEodm9pZCkKK3sK KwlwZW5kaW5nX3JlcV90ICpyZXEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmcGVuZGluZ19mcmVlX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3Rf ZW1wdHkoJnBlbmRpbmdfZnJlZSkpIHsKKy8vCQlyZXEgPSBsaXN0X2VudHJ5KHBlbmRpbmdfZnJl ZS5uZXh0LCBwZW5kaW5nX3JlcV90LCBmcmVlX2xpc3QpOworCQlyZXEgPSBsaXN0X2VudHJ5KHBl bmRpbmdfZnJlZS5uZXh0LCBwZW5kaW5nX3JlcV90LCB1LnNjc2kuZnJlZV9saXN0KTsKKwkJbGlz dF9kZWwoJnJlcS0+dS5zY3NpLmZyZWVfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlcTsKK30KKwordm9pZCBm cmVlX3JlcShwZW5kaW5nX3JlcV90ICpyZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlp bnQgd2FzX2VtcHR5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBm bGFncyk7CisJd2FzX2VtcHR5ID0gbGlzdF9lbXB0eSgmcGVuZGluZ19mcmVlKTsKKwlsaXN0X2Fk ZCgmcmVxLT51LnNjc2kuZnJlZV9saXN0LCAmcGVuZGluZ19mcmVlKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZwZW5kaW5nX2ZyZWVfbG9jaywgZmxhZ3MpOworCWlmICh3YXNfZW1wdHkpCisJ CXdha2VfdXAoJnBlbmRpbmdfZnJlZV93cSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJhY2tfbm90 aWZ5X3dvcmsoc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbykKK3sKKwlpbmZvLT53YWl0aW5nX3Jl cXMgPSAxOworCXdha2VfdXAoJmluZm8tPndxKTsKK30KKworaXJxcmV0dXJuX3QgY29tYmFja19p bnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29t YmFja19ub3RpZnlfd29yaygoc3RydWN0IGNvbWJhY2tfaW5mbyAqKWRldl9pZCk7CisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fY29weV9yZXF1ZXN0X3JpbmdfaW5mbyhz dHJ1Y3QgY29tYmFja19pbmZvICppbmZvLAorCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpm dGJfcmVxLCBwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlwZW5kaW5nX3JlcS0+Y21u ZCA9IGZ0Yl9yZXEtPmNtbmQ7CisJcGVuZGluZ19yZXEtPmluZm8gPSBpbmZvOworCisJaWYgKGZ0 Yl9yZXEtPmNtbmQgPT0gQ01ORF9TQ1NJIHx8IGZ0Yl9yZXEtPmNtbmQgPT0gQ01ORF9TQ1NJX1JF U0VUKSB7CisJCXJldHVybiBjb3B5X3JlcXVlc3RfcmluZ19pbmZvKGluZm8sIGZ0Yl9yZXEsIHBl bmRpbmdfcmVxKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YRU5fRkMKKwkJcGVuZGluZ19y ZXEtPnUuZmMuZnRiX3JlcSA9ICpmdGJfcmVxOworI2Vsc2UKKwkJQlVHKCk7CisjZW5kaWYJCisJ fQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX2NvbWJhY2tfY21kX2ZuKHN0cnVjdCBj b21iYWNrX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZzY3NpaWZfZnRiX2JhY2tfcmluZyAqZnRi X3JpbmcgPSAmaW5mby0+ZnRiX3Jpbmc7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgICpm dGJfcmVxOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXNwb25zZSAqZnRiX3Jlc3A7CisKKwlwZW5k aW5nX3JlcV90ICpwZW5kaW5nX3JlcVt2c2NzaWlmX3JlcXNdOworCVJJTkdfSURYIHJjLCBycDsK KwlpbnQgaSwgZXJyLCBtb3JlX3RvX2RvID0gMDsKKwlpbnQgcXVldWVkID0gMDsKKwlpbnQgbm90 aWZ5OworLyoJdW5zaWduZWQgbG9uZyBmbGFnczsqLworCisJRFBSSU5USygiJXNcbiIsX19GVU5D VElPTl9fKTsKKworCXJjID0gZnRiX3JpbmctPnJlcV9jb25zOworCXJwID0gZnRiX3JpbmctPnNy aW5nLT5yZXFfcHJvZDsKKwlybWIoKTsKKworCXdoaWxlICgocmMgIT0gcnApICYmICFSSU5HX1JF UVVFU1RfQ09OU19PVkVSRkxPVyhmdGJfcmluZywgcmMpKSB7CisJCXBlbmRpbmdfcmVxW3F1ZXVl ZF0gPSBhbGxvY19yZXEoKTsKKwkJaWYgKE5VTEwgPT0gcGVuZGluZ19yZXFbcXVldWVkXSkgewor CQkJbW9yZV90b19kbyA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qKioqKiBGcm9udCB0byBC YWNrIHJlcXVlc3QgY29uc3VtZSAqKioqKi8KKwkJZnRiX3JlcSA9IFJJTkdfR0VUX1JFUVVFU1Qo ZnRiX3JpbmcsIHJjKTsKKwkJZnRiX3JpbmctPnJlcV9jb25zID0gKytyYzsKKworCQllcnIgPSBf X2NvcHlfcmVxdWVzdF9yaW5nX2luZm8oaW5mbywgZnRiX3JlcSwgcGVuZGluZ19yZXFbcXVldWVk XSk7CisKKwkJc2NzaV90cmFjZSgwLCAodW5zaWduZWQgY2hhciAqKShwZW5kaW5nX3JlcVtxdWV1 ZWRdKSwKKwkJCSAgIHNpemVvZihwZW5kaW5nX3JlcV90KSk7CisKKwkJLyogSXQgcmVzcG9uZHMg aW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgaXNzdWVkLiAqLworCQlmdGJfcmVzcCA9 IFJJTkdfR0VUX1JFU1BPTlNFKGZ0Yl9yaW5nLAorCQkJCQlmdGJfcmluZy0+cnNwX3Byb2RfcHZ0 KTsKKworCQlpZiAoIVJJTkdfRlVMTCgmaW5mby0+YnRmX3JpbmcpKSB7CisJCQlmdGJfcmVzcC0+ c3RhdHVzID0gU0NTSUlGX1JFUV9PS0FZOworCQl9IGVsc2UgeworCQkJZnRiX3Jlc3AtPnN0YXR1 cyA9IFNDU0lJRl9CVEZSSU5HX0JVU1k7CisJCQlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNL X05PVElGWSgmaW5mby0+YnRmX3JpbmcsIG5vdGlmeSk7CisJCQlpZiAobm90aWZ5KQorCQkJCW5v dGlmeV9yZW1vdGVfdmlhX2lycShpbmZvLT5pcnEpOworCQl9CisKKwkJZnRiX3JpbmctPnJzcF9w cm9kX3B2dCsrOworCQlSSU5HX1BVU0hfUkVTUE9OU0VTKGZ0Yl9yaW5nKTsKKworCQlxdWV1ZWQr KzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWVkOyBpKyspIHsKKwkJaWYgKHBlbmRpbmdf cmVxW2ldLT5jbW5kID09IENNTkRfU0NTSSkgeworCQkJc2NzaWJhY2tfY21kX2V4ZWMocGVuZGlu Z19yZXFbaV0pOworCQl9IGVsc2UgaWYgKHBlbmRpbmdfcmVxW2ldLT5jbW5kID09IENNTkRfU0NT SV9SRVNFVCkgeworCQkJc2NzaWJhY2tfcmVzZXRfZXhlYyhwZW5kaW5nX3JlcVtpXSk7CisjaWZu ZGVmIENPTkZJR19YRU5fRkMKKwkJfQorI2Vsc2UKKwkJfSBlbHNlIHsKKwkJCWZjYmFja19jbWRf ZXhlYyhwZW5kaW5nX3JlcVtpXSk7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChmdGJfcmluZy0+ cnNwX3Byb2RfcHZ0ID09IHJjKSB7CisJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKGZ0 Yl9yaW5nLCBtb3JlX3RvX2RvKTsKKwkJCisJfSBlbHNlIGlmIChSSU5HX0hBU19VTkNPTlNVTUVE X1JFUVVFU1RTKGZ0Yl9yaW5nKSkgeworCQltb3JlX3RvX2RvID0gMTsKKwl9CisKKwlyZXR1cm4g bW9yZV90b19kbzsKK30KKworaW50IGNvbWJhY2tfc2NoZWR1bGUodm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgY29tYmFja19pbmZvICppbmZvID0gKHN0cnVjdCBjb21iYWNrX2luZm8gKilkYXRhOwor CisJRFBSSU5USygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCXNjc2liYWNrX2dldChpbmZvKTsK KworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCXdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZSgKKwkJCWluZm8tPndxLAorCQkJaW5mby0+d2FpdGluZ19yZXFzIHx8IGt0aHJlYWRf c2hvdWxkX3N0b3AoKSk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKKwkJCXBlbmRpbmdf ZnJlZV93cSwKKwkJCSFsaXN0X2VtcHR5KCZwZW5kaW5nX2ZyZWUpIHx8IGt0aHJlYWRfc2hvdWxk X3N0b3AoKSk7CisKKwkJaW5mby0+d2FpdGluZ19yZXFzID0gMDsKKwkJc21wX21iKCk7CisKKwkJ aWYgKGRvX2NvbWJhY2tfY21kX2ZuKGluZm8pKQorCQkJaW5mby0+d2FpdGluZ19yZXFzID0gMTsK KwkJLyoqKioqIEJhY2sgdG8gRnJvbnQgcmVzcG9uc2UgY29uc3VtZSAqKioqKi8KKwkJcmVhZF9i dGZfcmluZ19yZXNwX2NvbnMoaW5mbyk7CisJfQorCisJaW5mby0+a3RocmVhZCA9IE5VTEw7CisJ c2NzaWJhY2tfcHV0KGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogCWZv ciBiYWNrZW5kIHRvIGZyb250ZW5kIGNvbW11bmljYXRpb24JCQkqLworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0 cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpjb21iYWNrX3ByZV9yZXBseShzdHJ1Y3QgY29tYmFj a19pbmZvICppbmZvKQoreworCXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpidGZfcmVxOwor CisJcm1iKCk7CisJYnRmX3JlcSA9IFJJTkdfR0VUX1JFUVVFU1QoJmluZm8tPmJ0Zl9yaW5nLCBp bmZvLT5idGZfcmluZy5yZXFfcHJvZF9wdnQpOworCWluZm8tPmJ0Zl9yaW5nLnJlcV9wcm9kX3B2 dCsrOworCisJcmV0dXJuIGJ0Zl9yZXE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYnRmX3Jpbmdf cmVzcF9jb25zKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pCit7CisJUklOR19JRFggcnA7CisK KwlycCA9IGluZm8tPmJ0Zl9yaW5nLnNyaW5nLT5yc3BfcHJvZDsKKwlybWIoKTsKKworCWlmIChp bmZvLT5idGZfcmluZy5yc3BfY29ucyAhPSBycCkKKwkJaW5mby0+YnRmX3JpbmcucnNwX2NvbnMg PSBycDsKK30KKwordm9pZCBjb21iYWNrX2RvX3JlcGx5KHN0cnVjdCBjb21iYWNrX2luZm8gKmlu Zm8pCit7CisJaW50IG5vdGlmeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisKKwlSSU5HX1BV U0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElGWSgmaW5mby0+YnRmX3JpbmcsIG5vdGlmeSk7CisJ aWYgKG5vdGlmeSkKKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKGluZm8tPmlycSk7CisKKwkvKioq KiogQmFjayB0byBGcm9udCByZXNwb25zZSBjb25zdW1lICoqKioqLworCXJlYWRfYnRmX3Jpbmdf cmVzcF9jb25zKGluZm8pOworCisJaWYgKFJJTkdfSEFTX1VOQ09OU1VNRURfUkVRVUVTVFMoJmlu Zm8tPmZ0Yl9yaW5nKSkgeworCQljb21iYWNrX25vdGlmeV93b3JrKGluZm8pOworCX0KK30KZGlm ZiAtciA5YmYxZGRkMGY2YmYgLXIgN2ZkNDkyOWY2YjIxIGRyaXZlcnMveGVuL3Njc2liYWNrL2Nv bWJhY2suaAotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysg Yi9kcml2ZXJzL3hlbi9zY3NpYmFjay9jb21iYWNrLmgJVGh1IE9jdCAxOCAxODo0Nzo1MyAyMDA3 ICswOTAwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBGVUpJ VFNVIExpbWl0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgYmxrYmFjayBkcml2ZXIgY29kZS4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBm cm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3 YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqIAorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2Fy ZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19TQ1NJSUZfX0JB Q0tFTkRfX0NPTU1PTl9IX18KKyNkZWZpbmUgX19TQ1NJSUZfX0JBQ0tFTkRfX0NPTU1PTl9IX18K KworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cisj aW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNs dWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRl IDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxv Yy5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPHhlbi9ldnRjaG4uaD4KKyNp bmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPHhlbi9nbnR0YWIuaD4KKyNpbmNs dWRlIDx4ZW4vZHJpdmVyX3V0aWwuaD4KKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CisjaW5jbHVk ZSA8eGVuL2ludGVyZmFjZS9pby9yaW5nLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFu dF90YWJsZS5oPgorLy8JI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vc2NzaWlmLmg+CisjaW5j bHVkZSA8eGVuL2ludGVyZmFjZS9pby92c2NzaWlmLmg+CisKKworLyojZGVmaW5lIFhFTkxPRyAq LworCisKKyNkZWZpbmUgRFBSSU5USyhfZiwgX2EuLi4pCQkJXAorCXByX2RlYnVnKCIoZmlsZT0l cywgbGluZT0lZCkgIiBfZiwJXAorCQkgX19GSUxFX18gLCBfX0xJTkVfXyAsICMjIF9hICkKKwor c3RydWN0IGNvbWJhY2tfaW5mbyB7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgU2NzaV9Ib3N0ICpob3N0OworCisJZG9taWRfdCBkb21pZDsKKwl1bnNpZ25lZCBpbnQgZXZ0 Y2huOworCXVuc2lnbmVkIGludCBpcnE7CisKKwl1bnNpZ25lZCBzaG9ydCBob3N0X25vOworCisJ c3RydWN0IHZzY3NpaWZfZnRiX2JhY2tfcmluZyAgZnRiX3Jpbmc7CisJc3RydWN0IHZzY3NpaWZf YnRmX2Zyb250X3JpbmcgYnRmX3Jpbmc7CisJc3RydWN0IHZtX3N0cnVjdCAqZnRiX3JpbmdfYXJl YTsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICpidGZfcmluZ19hcmVhOworCisJZ3JhbnRfaGFuZGxlX3Qg ZnRiX3NobWVtX2hhbmRsZTsKKwlncmFudF9yZWZfdCBmdGJfc2htZW1fcmVmOworCWdyYW50X2hh bmRsZV90IGJ0Zl9zaG1lbV9oYW5kbGU7CisJZ3JhbnRfcmVmX3QgYnRmX3NobWVtX3JlZjsKKwor CXN0cnVjdCB3b3JrX3N0cnVjdCBzY3NpYmFja193b3JrOworCisJc3BpbmxvY2tfdCByaW5nX2xv Y2tfZnRiOworCXNwaW5sb2NrX3QgcmluZ19sb2NrX2J0ZjsKKwlhdG9taWNfdCByZWZjbnQ7CisK KwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdGlu Z190b19mcmVlOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCXVuc2lnbmVkIGludCB3YWl0aW5n X3JlcXM7CisjaWZkZWYgQ09ORklHX1hFTl9GQworCXZvaWQJKmZjaW5mbzsKKyNlbmRpZgorCXN0 cnVjdCBwYWdlICoqbW1hcF9wYWdlczsKKworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2ln bmVkIGludCBjbW5kOworCXN0cnVjdCBjb21iYWNrX2luZm8gKmluZm87CisJdW5pb24geworCQlz dHJ1Y3Qgc2NzaV9wZW5kaW5nX3JlcSB7CisJCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJ CQl1bnNpZ25lZCBzaG9ydCBkYXRhX2RpcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnFpZDsKKwkJCWlu dCB1c2Vfc2c7CisJCQlpbnQgcmVxdWVzdF9idWZmbGVuOworCQkJYXRvbWljX3QgcGVuZGNudDsK KwkJCXN0cnVjdCByZXF1ZXN0ICpycTsKKwkJCXN0cnVjdCBzY3NpYmFja19yZXF1ZXN0X3NlZ21l bnR7CisJCQkJZ3JhbnRfcmVmX3QgZ3JlZjsKKwkJCQl1aW50MzJfdCBvZmZzZXQ7CisJCQkJdWlu dDMyX3QgbGVuZ3RoOworCQkJfSBwZW5kX3NlZ1tTR19UQUJMRVNJWkVdOworCQkJc3RydWN0IGxp c3RfaGVhZCBmcmVlX2xpc3Q7CisJCX0gc2NzaTsKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJCXN0 cnVjdCB7CisJCQlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCBmdGJfcmVxOworCQl9IGZjOwor I2VuZGlmCisJfSB1OworfSBwZW5kaW5nX3JlcV90OworCit0eXBlZGVmIHN0cnVjdCBzY3NpX3Bl bmRpbmdfcmVxCQlzY3NpX3BlbmRpbmdfcmVxX3Q7CisKK2lycXJldHVybl90IHNjc2liYWNrX2lu dHIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaW50IHNjc2liYWNrX2luaXRfc3Jp bmcoc3RydWN0IGNvbWJhY2tfaW5mbyAqLAorCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n LCB1bnNpZ25lZCBpbnQpOworaW50IHNjc2liYWNrX3NjaGVkdWxlKHZvaWQgKmRhdGEpOworCisK KyNkZWZpbmUgc2NzaWJhY2tfZ2V0KF9iKSAoYXRvbWljX2luYygmKF9iKS0+cmVmY250KSkKKyNk ZWZpbmUgc2NzaWJhY2tfcHV0KF9iKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGF0b21pY19k ZWNfYW5kX3Rlc3QoJihfYiktPnJlZmNudCkpCVwKKwkJCXdha2VfdXAoJihfYiktPndhaXRpbmdf dG9fZnJlZSk7XAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBjb21iYWNrX2luZm8gKnNjc2lpbmZv X2FsbG9jKGRvbWlkX3QgZG9taWQpOwordm9pZCBzY3NpYmFja19mcmVlKHN0cnVjdCBjb21iYWNr X2luZm8gKmluZm8pOwordm9pZCBzY3NpYmFja19kaXNjb25uZWN0KHN0cnVjdCBjb21iYWNrX2lu Zm8gKmluZm8pOwordm9pZCBfX2luaXQgc2NzaWJhY2tfaW50ZXJmYWNlX2luaXQodm9pZCk7Cit2 b2lkIF9fZXhpdCBzY3NpYmFja19pbnRlcmZhY2VfZXhpdCh2b2lkKTsKK2ludCBzY3NpaWZfeGVu YnVzX2luaXQodm9pZCk7Cit2b2lkIHNjc2lpZl94ZW5idXNfdW5yZWdpc3Rlcih2b2lkKTsKKwor CisjZW5kaWYgLyogX19TQ1NJSUZfX0JBQ0tFTkRfX0NPTU1PTl9IX18gKi8KZGlmZiAtciA5YmYx ZGRkMGY2YmYgLXIgN2ZkNDkyOWY2YjIxIGRyaXZlcnMveGVuL3Njc2liYWNrL2ZjYmFjay5jCi0t LSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMv eGVuL3Njc2liYWNrL2ZjYmFjay5jCVRodSBPY3QgMTggMTg6NDc6NTMgMjAwNyArMDkwMApAQCAt MCwwICsxLDU1OCBAQAorLyoKKyAqIFhlbiBTQ1NJIEZDIGJhY2tlbmQgZHJpdmVyCisgKgorICog Q29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJu ZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29w eQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+CisjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgorI2luY2x1ZGUgPHhlbi9pbnRl cmZhY2UvZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaD4K KyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3Qu aD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3Np X3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjaW5jbHVkZSAiY29t YmFjay5oIgorI2luY2x1ZGUgImZjYmFjay5oIgorCitleHRlcm4gdm9pZCB1bmJpbmRfZnJvbV9p cnFoYW5kbGVyKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKK2V4dGVybiBzdHJ1Y3QgZmNfZnVuY3Rp b25fdGVtcGxhdGUgKmZjX3Nob3N0MmZ0KHN0cnVjdCBTY3NpX0hvc3QgKik7CitleHRlcm4gc3Ry dWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKmNvbWJhY2tfcHJlX3JlcGx5KHN0cnVjdCBjb21iYWNr X2luZm8gKik7CitleHRlcm4gdm9pZCBjb21iYWNrX2RvX3JlcGx5KHN0cnVjdCBjb21iYWNrX2lu Zm8gKik7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHNjc2lfdGFy Z2V0ICpzaG9zdF90b19zdGFyZ2V0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgICAg dW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3Ry dWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCAqZm91bmRfc3RhcmdldCA9IE5VTEw7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHN0YXJnZXQsICYoc2hvc3QtPl9fdGFyZ2V0cyksIHNpYmxpbmdzKSB7 CisJCWlmICgoc3RhcmdldC0+Y2hhbm5lbCA9PSBjaGFubmVsKSAmJiAoc3RhcmdldC0+aWQgPT0g aWQpKSB7CisJCQlmb3VuZF9zdGFyZ2V0ID0gc3RhcmdldDsKKwkJCWJyZWFrOworCQl9CisJfQor CisJcmV0dXJuIGZvdW5kX3N0YXJnZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmNfcnBvcnQgKnNo b3N0X3RvX3Jwb3J0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1NjQgbm9kZV9uYW1lLAorCQkJ CSAgICAgICB1NjQgcG9ydF9uYW1lLCB1MzIgcG9ydF9pZCwgdTMyIHJvbGVzKQoreworCXN0cnVj dCBmY19ycG9ydCAqcnBvcnQsICpmb3VuZF9ycG9ydCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KHJwb3J0LCAmZmNfaG9zdF9ycG9ydHMoc2hvc3QpLCBwZWVycykgeworCQlpZiAoKHJw b3J0LT5ub2RlX25hbWUgPT0gbm9kZV9uYW1lKSAmJgorCQkJKHJwb3J0LT5wb3J0X25hbWUgPT0g cG9ydF9uYW1lKSAmJgorCQkJKHJwb3J0LT5wb3J0X2lkICAgPT0gcG9ydF9pZCkgICAmJgorCQkJ KHJwb3J0LT5yb2xlcyAgICAgPT0gcm9sZXMpKSB7CisJCQlmb3VuZF9ycG9ydCA9IHJwb3J0Owor CQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmRfcnBvcnQ7Cit9CisKKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGZjYmFja19tYWluKHN0cnVjdCBmY2JhY2tfaW5m byAqaW5mbywKKwkJICAgICAgIHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3JlcV90 bXApCit7CisJc3RydWN0IGNvbWJhY2tfaW5mbyAqY29taW5mbyA9IGluZm8tPmNvbWluZm87CisJ c3RydWN0IHZzY3NpaWZfZnRiX2JhY2tfcmluZyAqcmluZyA9ICYoY29taW5mby0+ZnRiX3Jpbmcp OworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3JlcSA9ICYoaW5mby0+ZnRiX3Jl cSk7CisJc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKnJpbmdfcmVzOworCXN0cnVjdCBmY19m dW5jdGlvbl90ZW1wbGF0ZSAqZnQgPSBmY19zaG9zdDJmdChjb21pbmZvLT5ob3N0KTsKKwlzdHJ1 Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IGZjX3Jwb3J0CSpycG9ydDsKKworCS8q IE11c3QgY2hlY2sgYnkgY2xhc3Mgb3Igc29tZXRoaW5nIC4uLiAqLworCWlmICgoc3RyY21wKGNv bWluZm8tPmhvc3QtPmhvc3R0LT5uYW1lLCAicWxhMnh4eCIpICE9IDApICYmCisJICAgIChzdHJj bXAoY29taW5mby0+aG9zdC0+aG9zdHQtPm5hbWUsICJscGZjIikgIT0gMCkpIHsKKwkJcHJpbnRr KEtFUk5fRVJSCisJCSAgICAgICAiJXM6IG5vdCBhIHN1cHBvcnRlZCBmaWJyZSBjaGFubmVsIGNh cmQ+Pj5cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJ bWVtY3B5KHJpbmdfcmVxLCByaW5nX3JlcV90bXAsIHNpemVvZihzdHJ1Y3QgdnNjc2lpZl9mdGJf cmVxdWVzdCkpOworCQorCS8qCisJICBQZXJmb3JtIHNwZWNpZmllZCBmdW5jdGlvbiBhbmQgc2Vu ZCByZXNwb25zZSB0byBEb21VCisJKi8KKworCXJpbmdfcmVzID0gY29tYmFja19wcmVfcmVwbHko Y29taW5mbyk7CisKKwlyaW5nX3Jlcy0+cnNsdCA9IC0xOworCisJc3dpdGNoIChyaW5nX3JlcS0+ Y21uZCkgeworCWNhc2UgQ01ORF9HRVRfSE9TVF9QT1JUX0lEOgorCQlpZiAoKGZ0LT5zaG93X2hv c3RfcG9ydF9pZCAhPSAwKSAmJgorCQkgICAgKGZ0LT5nZXRfaG9zdF9wb3J0X2lkICE9IE5VTEwp KSB7CisJCQlmdC0+Z2V0X2hvc3RfcG9ydF9pZChjb21pbmZvLT5ob3N0KTsKKwkJCXJpbmdfcmVz LT51LmdocGkucG9ydF9pZCA9ICgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikKKwkJCQkoY29taW5m by0+aG9zdC0+c2hvc3RfZGF0YSkpLT5wb3J0X2lkOworCQkJcmluZ19yZXMtPnJxaWQgPSByaW5n X3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVhazsKKwkJCQor CWNhc2UgQ01ORF9HRVRfSE9TVF9QT1JUX1RZUEU6CisJCWlmICgoZnQtPnNob3dfaG9zdF9wb3J0 X3R5cGUgIT0gMCkgJiYKKwkJICAgIChmdC0+Z2V0X2hvc3RfcG9ydF90eXBlICE9IE5VTEwpKSB7 CisJCQlmdC0+Z2V0X2hvc3RfcG9ydF90eXBlKGNvbWluZm8tPmhvc3QpOworCQkJcmluZ19yZXMt PnUuZ2hwdC5wb3J0X3R5cGUgPSAoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopCisJCQkJKGNvbWlu Zm8tPmhvc3QtPnNob3N0X2RhdGEpKS0+cG9ydF90eXBlOworCQkJcmluZ19yZXMtPnJxaWQgPSBy aW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVhazsKKwkJ CQorCWNhc2UgQ01ORF9HRVRfSE9TVF9QT1JUX1NUQVRFOgorCQlpZiAoKGZ0LT5zaG93X2hvc3Rf cG9ydF9zdGF0ZSAhPSAwKSAmJgorCQkgICAgKGZ0LT5nZXRfaG9zdF9wb3J0X3N0YXRlICE9IE5V TEwpKSB7CisJCQlmdC0+Z2V0X2hvc3RfcG9ydF9zdGF0ZShjb21pbmZvLT5ob3N0KTsKKwkJCXJp bmdfcmVzLT51LmdocHMucG9ydF9zdGF0ZSA9ICgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikKKwkJ CQkoY29taW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5wb3J0X3N0YXRlOworCQkJcmluZ19yZXMt PnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQli cmVhazsKKwkJCQorCWNhc2UgQ01ORF9HRVRfSE9TVF9BQ1RJVkVfRkM0UzoKKwkJaWYgKChmdC0+ c2hvd19ob3N0X2FjdGl2ZV9mYzRzICE9IDApICYmCisJCSAgICAoZnQtPmdldF9ob3N0X2FjdGl2 ZV9mYzRzICE9IE5VTEwpKSB7CisJCQlmdC0+Z2V0X2hvc3RfYWN0aXZlX2ZjNHMoY29taW5mby0+ aG9zdCk7CisJCQltZW1jcHkocmluZ19yZXMtPnUuZ2hhZi5hY3RpdmVfZmM0cywKKwkJCSAgICAg ICAoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopCisJCQkJKGNvbWluZm8tPmhvc3QtPnNob3N0X2Rh dGEpKS0+YWN0aXZlX2ZjNHMsCisJCQkgICAgICAgc2l6ZW9mKHJpbmdfcmVzLT51LmdoYWYuYWN0 aXZlX2ZjNHMpKTsKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5n X3Jlcy0+cnNsdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRfR0VUX0hPU1Rf U1BFRUQ6CisJCWlmICgoZnQtPnNob3dfaG9zdF9zcGVlZCAhPSAwKSAmJgorCQkgICAgKGZ0LT5n ZXRfaG9zdF9zcGVlZCAhPSBOVUxMKSkgeworCQkJZnQtPmdldF9ob3N0X3NwZWVkKGNvbWluZm8t Pmhvc3QpOworCQkJcmluZ19yZXMtPnUuZ2hzcC5zcGVlZCA9ICgoc3RydWN0IGZjX2hvc3RfYXR0 cnMgKikKKwkJCQkoY29taW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5zcGVlZDsKKwkJCXJpbmdf cmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCX0K KwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRfR0VUX0hPU1RfRkFCUklDX05BTUU6CisJCWlmICgo ZnQtPnNob3dfaG9zdF9mYWJyaWNfbmFtZSAhPSAwKSAmJgorCQkgICAgKGZ0LT5nZXRfaG9zdF9m YWJyaWNfbmFtZSAhPSBOVUxMKSkgeworCQkJZnQtPmdldF9ob3N0X2ZhYnJpY19uYW1lKGNvbWlu Zm8tPmhvc3QpOworCQkJcmluZ19yZXMtPnUuZ2hmbi5mYWJyaWNfbmFtZSA9CisJCQkJKChzdHJ1 Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJCSAoY29taW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5m YWJyaWNfbmFtZTsKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5n X3Jlcy0+cnNsdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRfR0VUX0hPU1Rf U1RBVFM6IHsKKwkJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqaHM7CisKKwkJaWYgKGZ0LT5n ZXRfZmNfaG9zdF9zdGF0cyAhPSBOVUxMKSB7CisJCQlpZiAoKGhzID0gZnQtPmdldF9mY19ob3N0 X3N0YXRzKAorCQkJCQkJY29taW5mby0+aG9zdCkpID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJ CX0KKwkJCXJpbmdfcmVzLT51Lmdoc3Quc3RhdHMgPSAqaHM7CisJCQlyaW5nX3Jlcy0+cnFpZCAg ICAgICAgID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5nX3Jlcy0+cnNsdCAgICAgICAgID0gMDsK KwkJfQorCQlicmVhazsgfQorCisJY2FzZSBDTU5EX1JFU0VUX0hPU1RfU1RBVFM6CisJCWlmIChm dC0+cmVzZXRfZmNfaG9zdF9zdGF0cyAhPSBOVUxMKSB7CisJCQlmdC0+cmVzZXRfZmNfaG9zdF9z dGF0cyhjb21pbmZvLT5ob3N0KTsKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7 CisJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRf SVNTVUVfSE9TVF9MSVA6CisJCWlmIChmdC0+aXNzdWVfZmNfaG9zdF9saXAgIT0gTlVMTCkgewor CQkJcmluZ19yZXMtPnJzbHQgPSBmdC0+aXNzdWVfZmNfaG9zdF9saXAoY29taW5mby0+aG9zdCk7 CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQl9CisJCWJyZWFrOworCQkJ CisJY2FzZSBDTU5EX0dFVF9TVEFSR0VUX1BPUlRfSUQ6CisJCWlmICgoZnQtPnNob3dfc3Rhcmdl dF9wb3J0X2lkICE9IDApICYmCisJCSAgICAoZnQtPmdldF9zdGFyZ2V0X3BvcnRfaWQgIT0gTlVM TCkpIHsKKwkJCWlmICgoc3RhcmdldCA9IHNob3N0X3RvX3N0YXJnZXQoY29taW5mby0+aG9zdCwK KwkJCQkJcmluZ19yZXEtPnUuZ3RwaS5jaGFubmVsLAorCQkJCQlyaW5nX3JlcS0+dS5ndHBpLmlk KSkgPT0gTlVMTCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJZnQtPmdldF9zdGFyZ2V0X3BvcnRf aWQoc3RhcmdldCk7CisJCQlyaW5nX3Jlcy0+dS5ndHBpLnBvcnRfaWQgPSAoKHN0cnVjdCBmY19z dGFyZ2V0X2F0dHJzICopCisJCQkJCSgmKHN0YXJnZXQtPnN0YXJnZXRfZGF0YSkpKS0+cG9ydF9p ZDsKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5nX3Jlcy0+cnNs dCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRfR0VUX1NUQVJHRVRfTk9ERV9O QU1FOgorCQlpZiAoKGZ0LT5zaG93X3N0YXJnZXRfbm9kZV9uYW1lICE9IDApICYmCisJCSAgICAo ZnQtPmdldF9zdGFyZ2V0X25vZGVfbmFtZSAhPSBOVUxMKSkgeworCQkJaWYgKChzdGFyZ2V0ID0g c2hvc3RfdG9fc3RhcmdldChjb21pbmZvLT5ob3N0LAorCQkJCQlyaW5nX3JlcS0+dS5ndG5uLmNo YW5uZWwsCisJCQkJCXJpbmdfcmVxLT51Lmd0bm4uaWQpKSA9PSBOVUxMKSB7CisJCQkJYnJlYWs7 CisJCQl9CisJCQlmdC0+Z2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpOworCQkJcmluZ19y ZXMtPnUuZ3Rubi5ub2RlX25hbWUgPQorCQkJCQkoKHN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzICop CisJCQkJCSgmKHN0YXJnZXQtPnN0YXJnZXRfZGF0YSkpKS0+bm9kZV9uYW1lOworCQkJcmluZ19y ZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQor CQlicmVhazsKKwkJCQorCWNhc2UgQ01ORF9HRVRfU1RBUkdFVF9QT1JUX05BTUU6CisJCWlmICgo ZnQtPnNob3dfc3RhcmdldF9wb3J0X25hbWUgIT0gMCkgJiYKKwkJICAgIChmdC0+Z2V0X3N0YXJn ZXRfcG9ydF9uYW1lICE9IE5VTEwpKSB7CisJCQlpZiAoKHN0YXJnZXQgPSBzaG9zdF90b19zdGFy Z2V0KGNvbWluZm8tPmhvc3QsCisJCQkJCXJpbmdfcmVxLT51Lmd0cG4uY2hhbm5lbCwKKwkJCQkJ cmluZ19yZXEtPnUuZ3Rwbi5pZCkpID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZ0 LT5nZXRfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCk7CisJCQlyaW5nX3Jlcy0+dS5ndHBuLnBv cnRfbmFtZSA9CisJCQkJKChzdHJ1Y3QgZmNfc3RhcmdldF9hdHRycyAqKQorCQkJCSgmKHN0YXJn ZXQtPnN0YXJnZXRfZGF0YSkpKS0+cG9ydF9uYW1lOworCQkJcmluZ19yZXMtPnJxaWQgPSByaW5n X3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVhazsKKwkJCQor CWNhc2UgQ01ORF9HRVRfUlBPUlRfTE9TU19UTU86CisJCWlmICgoZnQtPnNob3dfcnBvcnRfZGV2 X2xvc3NfdG1vICE9IDApICYmCisJCSAgICAoZnQtPmdldF9ycG9ydF9kZXZfbG9zc190bW8gIT0g TlVMTCkpIHsKKwkJCWlmICgocnBvcnQgPSBzaG9zdF90b19ycG9ydChjb21pbmZvLT5ob3N0LAor CQkJCQlyaW5nX3JlcS0+dS5ncGx0Lm5vZGVfbmFtZSwKKwkJCQkJcmluZ19yZXEtPnUuZ3BsdC5w b3J0X25hbWUsCisJCQkJCXJpbmdfcmVxLT51LmdwbHQucG9ydF9pZCwKKwkJCQkJcmluZ19yZXEt PnUuZ3BsdC5yb2xlcykpID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZ0LT5nZXRf cnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0KTsKKwkJCXJpbmdfcmVzLT51LmdwbHQudGltZW91dCA9 IHJwb3J0LT5kZXZfbG9zc190bW87CisJCQlyaW5nX3Jlcy0+cnFpZCAgICAgICAgICAgPSByaW5n X3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ICAgICAgICAgICA9IDA7CisJCX0KKwkJYnJl YWs7CisJCQkKKwljYXNlIENNTkRfU0VUX1JQT1JUX0xPU1NfVE1POgorCQlpZiAoZnQtPnNldF9y cG9ydF9kZXZfbG9zc190bW8gIT0gTlVMTCkgeworCQkJaWYgKChycG9ydCA9IHNob3N0X3RvX3Jw b3J0KGNvbWluZm8tPmhvc3QsCisJCQkJCXJpbmdfcmVxLT51LnNwbHQubm9kZV9uYW1lLAorCQkJ CQlyaW5nX3JlcS0+dS5zcGx0LnBvcnRfbmFtZSwKKwkJCQkJcmluZ19yZXEtPnUuc3BsdC5wb3J0 X2lkLAorCQkJCQlyaW5nX3JlcS0+dS5zcGx0LnJvbGVzKSkgPT0gTlVMTCkgeworCQkJCWJyZWFr OworCQkJfQorCQkJZnQtPnNldF9ycG9ydF9kZXZfbG9zc190bW8ocnBvcnQsCisJCQkJCQkgICBy aW5nX3JlcS0+dS5zcGx0LnRpbWVvdXQpOworCQkJcmluZ19yZXMtPnUuc3BsdC50aW1lb3V0ID0g cnBvcnQtPmRldl9sb3NzX3RtbzsKKwkJCXJpbmdfcmVzLT5ycWlkICAgICAgICAgICA9IHJpbmdf cmVxLT5ycWlkOworCQkJcmluZ19yZXMtPnJzbHQgICAgICAgICAgID0gMDsKKwkJfQorCQlicmVh azsKKwkJCQorCWNhc2UgQ01ORF9HRVRfSU5JVElBTF9TSE9TVF9BVFRSSUI6IHsKKwkJc3RydWN0 IGZjX2hvc3RfYXR0cnMgKmhvc3RfYXR0cnMgPSAoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikKKwkJ CQkJCShjb21pbmZvLT5ob3N0LT5zaG9zdF9kYXRhKTsKKwkJc3RydWN0IGdpaGEgKmdpaGEgPSAo c3RydWN0IGdpaGEgKikoaW5mby0+Z250X2FyZWEtPmFkZHIpOworCisJCW1lbWNweShnaWhhLT5h Y3RpdmVfZmM0cywgaG9zdF9hdHRycy0+YWN0aXZlX2ZjNHMsCisJCSAgICAgICBzaXplb2YoZ2lo YS0+YWN0aXZlX2ZjNHMpKTsKKwkJZ2loYS0+ZmFicmljX25hbWUgICAgICAgPSBob3N0X2F0dHJz LT5mYWJyaWNfbmFtZTsKKwkJZ2loYS0+bWF4ZnJhbWVfc2l6ZSAgICAgPSBob3N0X2F0dHJzLT5t YXhmcmFtZV9zaXplOworCQlnaWhhLT5ub2RlX25hbWUgICAgICAgICA9IGhvc3RfYXR0cnMtPm5v ZGVfbmFtZTsKKwkJZ2loYS0+cGVybWFuZW50X3BvcnRfbmFtZQorCQkJCQk9IGhvc3RfYXR0cnMt PnBlcm1hbmVudF9wb3J0X25hbWU7CisJCWdpaGEtPnBvcnRfaWQgICAgICAgICAgID0gaG9zdF9h dHRycy0+cG9ydF9pZDsKKwkJZ2loYS0+cG9ydF9uYW1lICAgICAgICAgPSBob3N0X2F0dHJzLT5w b3J0X25hbWU7CisJCWdpaGEtPnBvcnRfc3RhdGUgICAgICAgID0gaG9zdF9hdHRycy0+cG9ydF9z dGF0ZTsKKwkJZ2loYS0+cG9ydF90eXBlICAgICAgICAgPSBob3N0X2F0dHJzLT5wb3J0X3R5cGU7 CisJCW1lbWNweShnaWhhLT5zZXJpYWxfbnVtYmVyLCBob3N0X2F0dHJzLT5zZXJpYWxfbnVtYmVy LAorCQkgICAgICAgc2l6ZW9mKGdpaGEtPnNlcmlhbF9udW1iZXIpKTsKKwkJZ2loYS0+c3BlZWQg ICAgICAgICAgICAgPSBob3N0X2F0dHJzLT5zcGVlZDsKKwkJeworCQkJc3RydWN0IGZjX2hvc3Rf c3RhdGlzdGljcyAqaHM7CisKKwkJCWlmIChmdC0+Z2V0X2ZjX2hvc3Rfc3RhdHMgIT0gTlVMTCkg eworCQkJCWlmICgoaHMgPSBmdC0+Z2V0X2ZjX2hvc3Rfc3RhdHMoCisJCQkJCQljb21pbmZvLT5o b3N0KSkgIT0gTlVMTCkgeworCQkJCQlnaWhhLT5zdGF0cyA9ICpoczsKKwkJCQl9IGVsc2Ugewor CQkJCQltZW1zZXQoJihnaWhhLT5zdGF0cyksIDAsCisJCQkJCSAgICAgICBzaXplb2YoZ2loYS0+ c3RhdHMpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZ2loYS0+c3VwcG9ydGVkX2NsYXNzZXMgPSBo b3N0X2F0dHJzLT5zdXBwb3J0ZWRfY2xhc3NlczsKKwkJbWVtY3B5KGdpaGEtPnN1cHBvcnRlZF9m YzRzLCBob3N0X2F0dHJzLT5zdXBwb3J0ZWRfZmM0cywKKwkJICAgICAgIHNpemVvZihnaWhhLT5z dXBwb3J0ZWRfZmM0cykpOworCQlnaWhhLT5zdXBwb3J0ZWRfc3BlZWRzICA9IGhvc3RfYXR0cnMt PnN1cHBvcnRlZF9zcGVlZHM7CisJCW1lbWNweShnaWhhLT5zeW1ib2xpY19uYW1lLCBob3N0X2F0 dHJzLT5zeW1ib2xpY19uYW1lLAorCQkgICAgICAgc2l6ZW9mKGdpaGEtPnN5bWJvbGljX25hbWUp KTsKKwkJZ2loYS0+dGd0aWRfYmluZF90eXBlICAgPSBob3N0X2F0dHJzLT50Z3RpZF9iaW5kX3R5 cGU7CisJCQkKKwkJcmluZ19yZXMtPnJxaWQgICAgICAgICAgPSByaW5nX3JlcS0+cnFpZDsKKwkJ cmluZ19yZXMtPnJzbHQgICAgICAgICAgPSAwOworCQkJCisJCWJyZWFrOyB9CisJCSAgCisJY2Fz ZSBDTU5EX0dFVF9JTklUSUFMX1NUQVJHRVRfQVRUUklCOiB7CisJCXN0cnVjdCBzY3NpX3Rhcmdl dCAqc3RhcmdldDsKKwkJc3RydWN0IGZjX3N0YXJnZXRfYXR0cnMJKnN0YXJnZXRfYXR0cnM7CisJ CXVuc2lnbmVkIGludCBpID0gMDsKKwkJc3RydWN0IGdpdGEgKmdpdGEgPSAoc3RydWN0IGdpdGEg KikoaW5mby0+Z250X2FyZWEtPmFkZHIpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Rhcmdl dCwKKwkJCQkgICAgJihjb21pbmZvLT5ob3N0LT5fX3RhcmdldHMpLCBzaWJsaW5ncykgeworCQkJ c3RhcmdldF9hdHRycyA9IChzdHJ1Y3QgZmNfc3RhcmdldF9hdHRycyAqKQorCQkJCQkJKCYoc3Rh cmdldC0+c3RhcmdldF9kYXRhKSk7CisJCQlnaXRhLT5lW2ldLmNoYW5uZWwgICA9IHN0YXJnZXQt PmNoYW5uZWw7CisJCQlnaXRhLT5lW2ldLmlkICAgICAgICA9IHN0YXJnZXQtPmlkOworCQkJZ2l0 YS0+ZVtpXS5ub2RlX25hbWUgPSBzdGFyZ2V0X2F0dHJzLT5ub2RlX25hbWU7CisJCQlnaXRhLT5l W2ldLnBvcnRfaWQgICA9IHN0YXJnZXRfYXR0cnMtPnBvcnRfaWQ7CisJCQlnaXRhLT5lW2ldLnBv cnRfbmFtZSA9IHN0YXJnZXRfYXR0cnMtPnBvcnRfbmFtZTsKKwkJCWkrKzsKKwkJCWlmIChpID4g U0NTSV9GQ19NQVhfU1RBUkdFVCkgeworCQkJCXJpbmdfcmVzLT5yc2x0ID0gLTE7CisJCQkJZ290 byBvdXRfZ2l0YTsKKwkJCX0KKwkJfQorCQlnaXRhLT5udW0gPSBpOworCisJCXJpbmdfcmVzLT5y cWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKworb3V0X2dpdGE6 CisJCWJyZWFrOyB9CisJCSAgCisJY2FzZSBDTU5EX0dFVF9JTklUSUFMX1JQT1JUX0FUVFJJQjog eworCQlzdHJ1Y3QgZmNfcnBvcnQgKmZvdW5kX3Jwb3J0OworCQl1bnNpZ25lZCBpbnQgaSA9IDA7 CisJCXN0cnVjdCBnaXBhICpnaXBhID0gKHN0cnVjdCBnaXBhICopKGluZm8tPmdudF9hcmVhLT5h ZGRyKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvdW5kX3Jwb3J0LAorCQkJCSAgICAmZmNf aG9zdF9ycG9ydHMoY29taW5mby0+aG9zdCksIHBlZXJzKSB7CisJCQlnaXBhLT5lW2ldLmRldl9s b3NzX3RtbyAgPSBmb3VuZF9ycG9ydC0+ZGV2X2xvc3NfdG1vOworCQkJZ2lwYS0+ZVtpXS5tYXhm cmFtZV9zaXplID0gZm91bmRfcnBvcnQtPm1heGZyYW1lX3NpemU7CisJCQlnaXBhLT5lW2ldLm5v ZGVfbmFtZSAgICAgPSBmb3VuZF9ycG9ydC0+bm9kZV9uYW1lOworCQkJZ2lwYS0+ZVtpXS5wb3J0 X2lkICAgICAgID0gZm91bmRfcnBvcnQtPnBvcnRfaWQ7CisJCQlnaXBhLT5lW2ldLnBvcnRfbmFt ZSAgICAgPSBmb3VuZF9ycG9ydC0+cG9ydF9uYW1lOworCQkJZ2lwYS0+ZVtpXS5wb3J0X3N0YXRl ICAgID0gZm91bmRfcnBvcnQtPnBvcnRfc3RhdGU7CisJCQlnaXBhLT5lW2ldLnJvbGVzICAgICAg ICAgPSBmb3VuZF9ycG9ydC0+cm9sZXM7CisJCQlnaXBhLT5lW2ldLnNjc2lfdGFyZ2V0X2lkCisJ CQkJCQkgPSBmb3VuZF9ycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisJCQlnaXBhLT5lW2ldLnN1cHBv cnRlZF9jbGFzc2VzCisJCQkJCT0gZm91bmRfcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzOworCQkJ Z2lwYS0+ZVtpXS5jaGFubmVsICAgICAgID0gZm91bmRfcnBvcnQtPmNoYW5uZWw7CisJCQlpKys7 CisJCQlpZiAoaSA+IFNDU0lfRkNfTUFYX1JQT1JUKSB7CisJCQkJcmluZ19yZXMtPnJzbHQgPSAt MTsKKwkJCQlnb3RvIG91dF9naXBhOworCQkJfQorCQl9CisJCWdpcGEtPm51bSA9IGk7CisKKwkJ cmluZ19yZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJcmluZ19yZXMtPnJzbHQgPSAwOwor CitvdXRfZ2lwYToKKwkJYnJlYWs7IH0KKwkJICAKKwljYXNlIENNTkRfR0VUX0ZVTkNUSU9OX1RF TVBMQVRFOiB7CisJCXN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSAqZnQ7CisJCXN0cnVjdCBn ZnRwICpnZnRwID0gKHN0cnVjdCBnZnRwICopKGluZm8tPmdudF9hcmVhLT5hZGRyKTsKKworCQlm dCA9IGZjX3Nob3N0MmZ0KGNvbWluZm8tPmhvc3QpOworCQltZW1jcHkoJihnZnRwLT5mdCksIGZ0 LCBzaXplb2YoZ2Z0cC0+ZnQpKTsKKworCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlk OworCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQkKKwkJYnJlYWs7IH0KKworCWRlZmF1bHQ6CisJ CXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gY29tbWFuZD4+PlxuIiwKKwkJICAgICAgIF9f RlVOQ1RJT05fXyk7CisJCXJpbmdfcmVzLT5yc2x0ID0gLTE7CisJCWJyZWFrOworCX0KKworCWNv bWJhY2tfZG9fcmVwbHkoY29taW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmY2JhY2tf Y21kX2V4ZWMocGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCit7CisJKHZvaWQpZmNiYWNrX21h aW4oKHN0cnVjdCBmY2JhY2tfaW5mbyAqKShwZW5kaW5nX3JlcS0+aW5mby0+ZmNpbmZvKSwKKwkJ CSAgJihwZW5kaW5nX3JlcS0+dS5mYy5mdGJfcmVxKSk7Cit9CisKKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworc3RhdGljIGludCBfX3NldHVwX3hlbnN0b3JlKHN0cnVjdCBmY2JhY2tfaW5mbyAqaW5m bykKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gaW5mby0+Y29taW5mby0+ZGV2Owor CWludCBnbnRyZWY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoKHJldCA9IHhlbmJ1c19nYXRoZXIo WEJUX05JTCwgZGV2LT5vdGhlcmVuZCwKKwkJCQkgImZjX2dudHJlZiIsICIlZCIsICAmZ250cmVm LCBOVUxMKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZjYmFjayAlczogeGVuYnVzX2dh dGhlcigpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlpbmZvLT5nbnRyZWYgPSBnbnRyZWY7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgX191bnNldHVwX3hlbnN0b3JlKHN0cnVjdCBmY2JhY2tfaW5mbyAqaW5mbykKK3sK KwkvKiBjdXJyZW50bHksIG5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGludCBfX3NldHVw X2dyYW50X3RhYmxlKHN0cnVjdCBmY2JhY2tfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZ250dGFi X21hcF9ncmFudF9yZWYgb3A7CisJc3RydWN0IHZtX3N0cnVjdCAqZ250X2FyZWE7CisJaW50IGVy cjsKKworCWlmICgoZ250X2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0VfU0laRSkpID09IE5VTEwp IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmY2JhY2sgJXM6IGFsbG9jX3ZtX2FyZWEoKSBlcnJvcj4+ PlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CWdudHRhYl9zZXRfbWFwX29wKCZvcCwgKHVuc2lnbmVkIGxvbmcpKGdudF9hcmVhLT5hZGRyKSwK KwkJCSAgR05UTUFQX2hvc3RfbWFwLAorCQkJICBpbmZvLT5nbnRyZWYsIGluZm8tPmNvbWluZm8t PmRldi0+b3RoZXJlbmRfaWQpOworCisJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChH TlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCAmb3AsIDEpOworCWlmIChvcC5zdGF0dXMpIHsKKwkJcHJp bnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmNiYWNrICVzOiBIWVBFUlZJU09SX2dyYW50X3RhYmxl X29wKCkgZXJyb3I+Pj5cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gb3Au c3RhdHVzOworCX0KKworCWluZm8tPmdudF9hcmVhID0gZ250X2FyZWE7CisJCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIF9fdW5zZXR1cF9ncmFudF90YWJsZShzdHJ1Y3QgZmNiYWNrX2lu Zm8gKmluZm8pCit7CisJLyogY3VycmVudGx5LCBub3RoaW5nIHRvIGRvICovCit9CisKK2ludCBm Y2JhY2tfY29ubmVjdGlvbl9zZXR1cChzdHJ1Y3QgY29tYmFja19pbmZvICpjb21pbmZvKQorewor CXN0cnVjdCBmY2JhY2tfaW5mbyAqaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCXsKKwkJY29taW5m by0+ZmNpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZjYmFja19pbmZvKSwKKwkJCQkJICBH RlBfS0VSTkVMKTsKKwkJaWYgKGNvbWluZm8tPmZjaW5mbyA9PSBOVUxMKSB7CisJCQlyZXQgPSAt RU5PTUVNOworCQkJZ290byBvdXQwOworCQl9CisJCW1lbXNldChjb21pbmZvLT5mY2luZm8sIDAs IHNpemVvZihzdHJ1Y3QgZmNiYWNrX2luZm8pKTsKKwkJaW5mbyA9IChzdHJ1Y3QgZmNiYWNrX2lu Zm8gKikoY29taW5mby0+ZmNpbmZvKTsKKwkJaW5mby0+Y29taW5mbyA9IGNvbWluZm87CisJfQor CQorCS8qIGV4Y2hhbmdlIHZhcmlvdXMgcGFyYW1ldGVycyB0aHJvdWdoIHhlbnN0b3JlICovCisJ aWYgKChyZXQgPSBfX3NldHVwX3hlbnN0b3JlKGluZm8pKSAhPSAwKSB7CisJCXByaW50ayhLRVJO X0VSUiAiZmNiYWNrICVzOiBfX3NldHVwX3hlbnN0b3JlKCkgZXJyb3I+Pj5cbiIsCisJCSAgICAg ICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDE7CisJfQorCisJLyogcHJlcGFyZSBmb3IgZ3Jh bnQgdGFibGUgKi8KKwlpZiAoKHJldCA9IF9fc2V0dXBfZ3JhbnRfdGFibGUoaW5mbykpICE9IDAp IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmY2JhY2sgJXM6IF9fc2V0dXBfZ3JhbnRfdGFibGUoKSBl cnJvcj4+PlxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwly ZXR1cm4gMDsKKworb3V0MjoKKwlfX3Vuc2V0dXBfeGVuc3RvcmUoaW5mbyk7CisKK291dDE6CisJ a2ZyZWUoY29taW5mby0+ZmNpbmZvKTsKKworb3V0MDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lk CitmY2JhY2tfY29ubmVjdGlvbl91bnNldHVwKHN0cnVjdCBjb21iYWNrX2luZm8gKmNvbWluZm8p Cit7CisJc3RydWN0IGZjYmFja19pbmZvICppbmZvID0gKHN0cnVjdCBmY2JhY2tfaW5mbyAqKShj b21pbmZvLT5mY2luZm8pOworCisJX191bnNldHVwX2dyYW50X3RhYmxlKGluZm8pOworCV9fdW5z ZXR1cF94ZW5zdG9yZShpbmZvKTsKKworCWtmcmVlKGNvbWluZm8tPmZjaW5mbyk7Cit9CisKKwor TU9EVUxFX0FVVEhPUigiSnVuIEthbWFkYSwgRnVqaXRzdSBMdGQuIik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIlhlbiBQYXJhLVZpcnR1YWwgU0NTSSBGaWJyZSBDaGFubmVsIEJhY2tlbmQgRHJpdmVy Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLXIgOWJmMWRkZDBmNmJmIC1yIDdmZDQ5 MjlmNmIyMSBkcml2ZXJzL3hlbi9zY3NpYmFjay9mY2JhY2suaAotLS0gL2Rldi9udWxsCVRodSBK YW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9mY2Jh Y2suaAlUaHUgT2N0IDE4IDE4OjQ3OjUzIDIwMDcgKzA5MDAKQEAgLTAsMCArMSwxNDcgQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZVSklUU1UgTGltaXRlZAorICoKKyAqIEJhc2VkIG9u IHRoZSBibGtiYWNrIGRyaXZlciBjb2RlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgor ICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3aGVu IGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBpbmNv cnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0 aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAq IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworCisjaWZuZGVmIF9fU0NTSUlGX19CQUNLRU5EX19GQ0JBQ0tfSF9fCisjZGVmaW5l IF9fU0NTSUlGX19CQUNLRU5EX19GQ0JBQ0tfSF9fCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlEZWZp bml0aW9uIG9mIEdyYW50IFRhYmxlIFN0cnVjdHVyZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwor I2RlZmluZSBTQ1NJX0ZDX01BWF9TVEFSR0VUCTMyCS8qIGxpbWl0ZWQgYnkgUEFHRV9TSVpFICov CisjZGVmaW5lIFNDU0lfRkNfTUFYX1JQT1JUCTMyCS8qIGxpbWl0ZWQgYnkgUEFHRV9TSVpFICov CisKK3N0cnVjdCBnaWhhIHsKKwl1OCAgYWN0aXZlX2ZjNHNbRkNfRkM0X0xJU1RfU0laRV07CisJ dTY0IGZhYnJpY19uYW1lOworCXUzMiBtYXhmcmFtZV9zaXplOworCXU2NCBub2RlX25hbWU7CisJ dTY0IHBlcm1hbmVudF9wb3J0X25hbWU7CisJdTMyIHBvcnRfaWQ7CisJdTY0IHBvcnRfbmFtZTsK KwllbnVtIGZjX3BvcnRfc3RhdGUgcG9ydF9zdGF0ZTsKKwllbnVtIGZjX3BvcnRfdHlwZSBwb3J0 X3R5cGU7CisJY2hhciBzZXJpYWxfbnVtYmVyW0ZDX1NFUklBTF9OVU1CRVJfU0laRV07CisJdTMy IHNwZWVkOworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3Mgc3RhdHM7CisJdTMyICBzdXBwb3J0 ZWRfY2xhc3NlczsKKwl1OCAgIHN1cHBvcnRlZF9mYzRzW0ZDX0ZDNF9MSVNUX1NJWkVdOworCXUz MiAgc3VwcG9ydGVkX3NwZWVkczsKKwljaGFyIHN5bWJvbGljX25hbWVbRkNfU1lNQk9MSUNfTkFN RV9TSVpFXTsKKwllbnVtIGZjX3RndGlkX2JpbmRpbmdfdHlwZSB0Z3RpZF9iaW5kX3R5cGU7Cit9 OworCitzdHJ1Y3QgZ2l0YSB7CisJdTMyIG51bTsKKwlzdHJ1Y3QgeworCQl1NjQgbm9kZV9uYW1l OworCQl1MzIgcG9ydF9pZDsKKwkJdTY0IHBvcnRfbmFtZTsKKwkJdTMyIGNoYW5uZWw7CisJCXUz MiBpZDsKKwl9IGVbU0NTSV9GQ19NQVhfU1RBUkdFVF07Cit9OworCitzdHJ1Y3QgZ2lwYSB7CisJ dTMyIG51bTsKKwlzdHJ1Y3QgeworCQl1MzIgZGV2X2xvc3NfdG1vOworCQl1MzIgbWF4ZnJhbWVf c2l6ZTsKKwkJdTY0IG5vZGVfbmFtZTsKKwkJdTMyIHBvcnRfaWQ7CisJCXU2NCBwb3J0X25hbWU7 CisJCWVudW0gZmNfcG9ydF9zdGF0ZSBwb3J0X3N0YXRlOworCQl1MzIgcm9sZXM7CisJCXUzMiBz Y3NpX3RhcmdldF9pZDsKKwkJdTMyIHN1cHBvcnRlZF9jbGFzc2VzOworCQl1MzIgY2hhbm5lbDsK Kwl9IGVbU0NTSV9GQ19NQVhfUlBPUlRdOworfTsKKworc3RydWN0IGdmdHAgeworCXN0cnVjdCBm Y19mdW5jdGlvbl90ZW1wbGF0ZQlmdDsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCURlZmlu aXRpb24gb2YgSW50ZXJuYWwgSW5mb3JtYXRpb24gU3RydWN0dXJlcworICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworCitzdHJ1Y3QgZmNmcm9udF9pbmZvIHsKKwlzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqY29t aW5mbzsKKworCWludCBnbnRyZWY7CisJdm9pZCAqYWRkcjsKKworCXN0cnVjdCB2c2NzaWlmX2J0 Zl9yZXF1ZXN0IGJ0Zl9yZXE7CisKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzIGhzOwkvKiBP biBiYWNrZW5kLCAiaHMiIGlzIHN0b3JlZCBpbiAqKipfaGJhICovCit9OworCitzdHJ1Y3QgZmNi YWNrX2luZm8geworCXN0cnVjdCBjb21iYWNrX2luZm8gKmNvbWluZm87CisKKwlpbnQgZ250cmVm OworCXN0cnVjdCB2bV9zdHJ1Y3QgKmdudF9hcmVhOworCisJc3RydWN0IHZzY3NpaWZfZnRiX3Jl cXVlc3QgZnRiX3JlcTsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCURlZmluaXRpb24gb2Yg RnJvbnQvQmFjayBjb21tb24gZnVuY3Rpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVj dCBmY19pbnRlcm5hbF9oZWFkIHsKKwlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsK KwlzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgKmY7Cit9OworICAKKworc3RhdGljIHN0cnVj dCBmY19mdW5jdGlvbl90ZW1wbGF0ZSAqCitmY19zaG9zdDJmdChzdHJ1Y3QgU2NzaV9Ib3N0ICpz aG9zdCkKK3sKKwlzdHJ1Y3QgZmNfaW50ZXJuYWxfaGVhZCAqaTsKKworCWkgPSBjb250YWluZXJf b2Yoc2hvc3QtPnRyYW5zcG9ydHQsIHN0cnVjdCBmY19pbnRlcm5hbF9oZWFkLCB0KTsKKwlyZXR1 cm4gaS0+ZjsKK30KKworc3RhdGljIHZvaWQKK2ZjX3VwZGF0ZV9mdChzdHJ1Y3QgU2NzaV9Ib3N0 ICpzaG9zdCwgc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICpmdCkKK3sKKwlzdHJ1Y3QgZmNf aW50ZXJuYWxfaGVhZCAqaTsKKworCWkgPSBjb250YWluZXJfb2Yoc2hvc3QtPnRyYW5zcG9ydHQs IHN0cnVjdCBmY19pbnRlcm5hbF9oZWFkLCB0KTsKKwlpLT5mID0gZnQ7Cit9CisKKyNlbmRpZiAv KiBfX1NDU0lJRl9fQkFDS0VORF9fRkNCQUNLX0hfXyAqLwpkaWZmIC1yIDliZjFkZGQwZjZiZiAt ciA3ZmQ0OTI5ZjZiMjEgZHJpdmVycy94ZW4vc2NzaWJhY2svaW50ZXJmYWNlLmMKLS0tIC9kZXYv bnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4vc2Nz aWJhY2svaW50ZXJmYWNlLmMJVGh1IE9jdCAxOCAxODo0Nzo1MyAyMDA3ICswOTAwCkBAIC0wLDAg KzEsMjE1IEBACisvKgorICogaW50ZXJmYWNlIG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgYmxrYmFjayBk cml2ZXIgY29kZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAor ICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8g b3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGlj ZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmls ZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNs dWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUg PHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisjaW5jbHVkZSA8c2Nz aS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4K KyNlbmRpZgorCisjaW5jbHVkZSAiY29tYmFjay5oIgorCisjaW5jbHVkZSA8eGVuL2V2dGNobi5o PgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworZXh0ZXJuIGlycXJldHVybl90IGNvbWJh Y2tfaW50cihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKworc3RhdGljIGttZW1f Y2FjaGVfdCAqc2NzaWJhY2tfY2FjaGVwOworCitzdHJ1Y3QgY29tYmFja19pbmZvICpzY3NpaW5m b19hbGxvYyhkb21pZF90IGRvbWlkKQoreworCXN0cnVjdCBjb21iYWNrX2luZm8gKmluZm87CisK KwlpbmZvID0ga21lbV9jYWNoZV9hbGxvYyhzY3NpYmFja19jYWNoZXAsIEdGUF9LRVJORUwpOwor CWlmICghaW5mbykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1zZXQoaW5mbywg MCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+ZG9taWQgPSBkb21pZDsKKy8qCXNwaW5fbG9ja19p bml0KCZpbmZvLT5yaW5nX2xvY2tfZnRiKTsqLworCXNwaW5fbG9ja19pbml0KCZpbmZvLT5yaW5n X2xvY2tfYnRmKTsKKwlhdG9taWNfc2V0KCZpbmZvLT5yZWZjbnQsIDEpOworCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJmluZm8tPndxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT53YWl0aW5n X3RvX2ZyZWUpOworCisJcmV0dXJuIGluZm87Cit9CisKK3N0YXRpYyBpbnQgbWFwX2Zyb250ZW5k X3BhZ2UoIHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8sCisJdW5zaWduZWQgbG9uZyBmdGJfcmlu Z19yZWYsIHVuc2lnbmVkIGxvbmcgYnRmX3JpbmdfcmVmKQoreworCXN0cnVjdCBnbnR0YWJfbWFw X2dyYW50X3JlZiBvcDsKKwlpbnQgZXJyOworCisJZ250dGFiX3NldF9tYXBfb3AoJm9wLCAodW5z aWduZWQgbG9uZylpbmZvLT5mdGJfcmluZ19hcmVhLT5hZGRyLAorCQkJCUdOVE1BUF9ob3N0X21h cCwgZnRiX3JpbmdfcmVmLAorCQkJCWluZm8tPmRvbWlkKTsKKworCWVyciA9IEhZUEVSVklTT1Jf Z3JhbnRfdGFibGVfb3AoR05UVEFCT1BfbWFwX2dyYW50X3JlZiwgJm9wLCAxKTsKKwlCVUdfT04o ZXJyKTsKKworCWlmIChvcC5zdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpYmFjazog R3JhbnQgdGFibGUgb3BlcmF0aW9uIGZhaWx1cmUgIVxuIik7CisJCXJldHVybiBvcC5zdGF0dXM7 CisJfQorCisJaW5mby0+ZnRiX3NobWVtX3JlZiAgICA9IGZ0Yl9yaW5nX3JlZjsKKwlpbmZvLT5m dGJfc2htZW1faGFuZGxlID0gb3AuaGFuZGxlOworCisJZ250dGFiX3NldF9tYXBfb3AoJm9wLCAo dW5zaWduZWQgbG9uZylpbmZvLT5idGZfcmluZ19hcmVhLT5hZGRyLAorCQkJCUdOVE1BUF9ob3N0 X21hcCwgYnRmX3JpbmdfcmVmLCBpbmZvLT5kb21pZCk7CisKKwllcnIgPSBIWVBFUlZJU09SX2dy YW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7CisJQlVHX09OKGVy cik7CisKKwlpZiAob3Auc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2NzaWJhY2s6IEdy YW50IHRhYmxlIG9wZXJhdGlvbiBmYWlsdXJlICFcbiIpOworCQlyZXR1cm4gb3Auc3RhdHVzOwor CX0KKworCWluZm8tPmJ0Zl9zaG1lbV9yZWYgICAgPSBidGZfcmluZ19yZWY7CisJaW5mby0+YnRm X3NobWVtX2hhbmRsZSA9IG9wLmhhbmRsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCB1bm1hcF9mcm9udGVuZF9wYWdlKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pCit7CisJc3Ry dWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgb3A7CisJaW50IGVycjsKKworCWdudHRhYl9zZXRf dW5tYXBfb3AoJm9wLCAodW5zaWduZWQgbG9uZylpbmZvLT5mdGJfcmluZ19hcmVhLT5hZGRyLAor CQkJCUdOVE1BUF9ob3N0X21hcCwgaW5mby0+ZnRiX3NobWVtX2hhbmRsZSk7CisKKwllcnIgPSBI WVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgJm9wLCAx KTsKKwlCVUdfT04oZXJyKTsKKworCWdudHRhYl9zZXRfdW5tYXBfb3AoJm9wLCAodW5zaWduZWQg bG9uZylpbmZvLT5idGZfcmluZ19hcmVhLT5hZGRyLAorCQkJCUdOVE1BUF9ob3N0X21hcCwgaW5m by0+YnRmX3NobWVtX2hhbmRsZSk7CisKKwllcnIgPSBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29w KEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgJm9wLCAxKTsKKwlCVUdfT04oZXJyKTsKK30KKwor aW50IHNjc2liYWNrX2luaXRfc3Jpbmcoc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbywKKwl1bnNp Z25lZCBsb25nIGZ0Yl9yaW5nX3JlZiwgdW5zaWduZWQgbG9uZyBidGZfcmluZ19yZWYsIHVuc2ln bmVkIGludCBldnRjaG4pCit7CisJc3RydWN0IHZzY3NpaWZfZnRiX3NyaW5nICpmdGJfc3Jpbmc7 CisJc3RydWN0IHZzY3NpaWZfYnRmX3NyaW5nICpidGZfc3Jpbmc7CisJaW50IGVycjsKKworCWlm IChpbmZvLT5pcnEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpYmFjazogQWxyZWFkeSBjb25u ZWN0ZWQgdGhyb3VnaD9cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpbmZvLT5mdGJfcmluZ19h cmVhID0gYWxsb2Nfdm1fYXJlYShQQUdFX1NJWkUpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1F Tk9NRU07CisJaW5mby0+YnRmX3JpbmdfYXJlYSA9IGFsbG9jX3ZtX2FyZWEoUEFHRV9TSVpFKTsK KwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gbWFwX2Zyb250ZW5kX3Bh Z2UoaW5mbywgZnRiX3JpbmdfcmVmLCBidGZfcmluZ19yZWYpOworCWlmIChlcnIpCisJCWdvdG8g ZnJlZV92bTsKKworCWZ0Yl9zcmluZyA9IChzdHJ1Y3QgdnNjc2lpZl9mdGJfc3JpbmcgKikgaW5m by0+ZnRiX3JpbmdfYXJlYS0+YWRkcjsKKwlCQUNLX1JJTkdfSU5JVCgmaW5mby0+ZnRiX3Jpbmcs IGZ0Yl9zcmluZywgUEFHRV9TSVpFKTsKKworCWJ0Zl9zcmluZyA9IChzdHJ1Y3QgdnNjc2lpZl9i dGZfc3JpbmcgKikgaW5mby0+YnRmX3JpbmdfYXJlYS0+YWRkcjsKKwlGUk9OVF9SSU5HX0lOSVQo JmluZm8tPmJ0Zl9yaW5nLCBidGZfc3JpbmcsIFBBR0VfU0laRSk7CisKKwllcnIgPSBiaW5kX2lu dGVyZG9tYWluX2V2dGNobl90b19pcnFoYW5kbGVyKAorCQkJaW5mby0+ZG9taWQsIGV2dGNobiwK KwkJCWNvbWJhY2tfaW50ciwgMCwgInNjc2lpZi1iYWNrZW5kIiwgaW5mbyk7CisKKwlpZiAoZXJy IDwgMCkKKwkJZ290byB1bm1hcF9wYWdlOworCQkKKwlpbmZvLT5pcnEgPSBlcnI7CisKKwlyZXR1 cm4gMDsKKwordW5tYXBfcGFnZToKKwl1bm1hcF9mcm9udGVuZF9wYWdlKGluZm8pOworZnJlZV92 bToKKwlmcmVlX3ZtX2FyZWEoaW5mby0+ZnRiX3JpbmdfYXJlYSk7CisJZnJlZV92bV9hcmVhKGlu Zm8tPmJ0Zl9yaW5nX2FyZWEpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgc2NzaWJhY2tfZGlz Y29ubmVjdChzdHJ1Y3QgY29tYmFja19pbmZvICppbmZvKQoreworCWlmIChpbmZvLT5rdGhyZWFk KSB7CisJCWt0aHJlYWRfc3RvcChpbmZvLT5rdGhyZWFkKTsKKwkJaW5mby0+a3RocmVhZCA9IE5V TEw7CisJfQorCisJYXRvbWljX2RlYygmaW5mby0+cmVmY250KTsKKwl3YWl0X2V2ZW50KGluZm8t PndhaXRpbmdfdG9fZnJlZSwgYXRvbWljX3JlYWQoJmluZm8tPnJlZmNudCkgPT0gMCk7CisJYXRv bWljX2luYygmaW5mby0+cmVmY250KTsKKworCWlmIChpbmZvLT5pcnEpIHsKKwkJdW5iaW5kX2Zy b21faXJxaGFuZGxlcihpbmZvLT5pcnEsIGluZm8pOworCQlpbmZvLT5pcnEgPSAwOworCX0KKwor CWlmIChpbmZvLT5mdGJfcmluZy5zcmluZyB8fCBpbmZvLT5idGZfcmluZy5zcmluZykgeworCQl1 bm1hcF9mcm9udGVuZF9wYWdlKGluZm8pOworCQlmcmVlX3ZtX2FyZWEoaW5mby0+ZnRiX3Jpbmdf YXJlYSk7CisJCWZyZWVfdm1fYXJlYShpbmZvLT5idGZfcmluZ19hcmVhKTsKKwkJaW5mby0+ZnRi X3Jpbmcuc3JpbmcgPSBOVUxMOworCQlpbmZvLT5idGZfcmluZy5zcmluZyA9IE5VTEw7CisJfQor fQorCit2b2lkIHNjc2liYWNrX2ZyZWUoc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbykKK3sKKwlp ZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmluZm8tPnJlZmNudCkpCisJCUJVRygpOworCWttZW1f Y2FjaGVfZnJlZShzY3NpYmFja19jYWNoZXAsIGluZm8pOworfQorCit2b2lkIF9faW5pdCBzY3Np YmFja19pbnRlcmZhY2VfaW5pdCh2b2lkKQoreworCXNjc2liYWNrX2NhY2hlcCA9IGttZW1fY2Fj aGVfY3JlYXRlKCJzY3NpaWZfY2FjaGUiLAorCQlzaXplb2Yoc3RydWN0IGNvbWJhY2tfaW5mbyks IDAsIDAsIE5VTEwsIE5VTEwpOworfQorCit2b2lkIF9fZXhpdCBzY3NpYmFja19pbnRlcmZhY2Vf ZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShzY3NpYmFja19jYWNoZXApOworfQpk aWZmIC1yIDliZjFkZGQwZjZiZiAtciA3ZmQ0OTI5ZjZiMjEgZHJpdmVycy94ZW4vc2NzaWJhY2sv c2NzaWJhY2suYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAor KysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9zY3NpYmFjay5jCVRodSBPY3QgMTggMTg6NDc6NTMg MjAwNyArMDkwMApAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIFhlbiBTQ1NJIGJhY2tlbmQgZHJp dmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0ZWQKKyAqCisgKiBC YXNlZCBvbiB0aGUgYmxrYmFjayBkcml2ZXIgY29kZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBv ciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwg b3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQor ICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgv YmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPHhlbi9iYWxs b29uLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2ku aD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0 Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9k YmcuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKworI2lmZGVmIENPTkZJR19YRU5fRkMK KyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3Ry YW5zcG9ydF9mYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21iYWNrLmgiCisKK2V4dGVybiBz dHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqIGNvbWJhY2tfcHJlX3JlcGx5KHN0cnVjdCBjb21i YWNrX2luZm8gKik7CitleHRlcm4gdm9pZCBjb21iYWNrX2RvX3JlcGx5KHN0cnVjdCBjb21iYWNr X2luZm8gKik7CitleHRlcm4gdm9pZCBmcmVlX3JlcShwZW5kaW5nX3JlcV90ICpyZXEpOworZXh0 ZXJuIGludCBfX2luaXQgc2NzaV90cmFjZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19leGl0 IHNjc2lfdHJhY2VfZXhpdCh2b2lkKTsKKworaW50IHZzY3NpaWZfcmVxcyA9IERFRkFVTFRfQ0FO X1FVRVVFOworbW9kdWxlX3BhcmFtX25hbWVkKHJlcXMsIHZzY3NpaWZfcmVxcywgaW50LCAwKTsK K01PRFVMRV9QQVJNX0RFU0MocmVxcywgIk51bWJlciBvZiBzY3NpYmFjayByZXF1ZXN0cyB0byBh bGxvY2F0ZSIpOworCisKKyNkZWZpbmUgSU5WQUxJRF9HUkFOVF9IQU5ETEUJMHhGRkZGCisjZGVm aW5lIFNDU0lCQUNLX0lOVkFMSURfSEFORExFICh+MCkKKworc3RhdGljIHBlbmRpbmdfcmVxX3Qg KnBlbmRpbmdfcmVxczsKK3N0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19mcmVlOworc3RhdGljIHN0 cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlczsKK3N0YXRpYyBncmFudF9oYW5kbGVfdCAqcGVuZGlu Z19ncmFudF9oYW5kbGVzOworCitzdGF0aWMgaW5saW5lIGludCB2YWRkcl9wYWdlbnIocGVuZGlu Z19yZXFfdCAqcmVxLCBpbnQgc2VnKQoreworCXJldHVybiAocmVxIC0gcGVuZGluZ19yZXFzKSAq IFNHX1RBQkxFU0laRSArIHNlZzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZh ZGRyKHBlbmRpbmdfcmVxX3QgKnJlcSwgaW50IHNlZykKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9 IHBhZ2VfdG9fcGZuKHBlbmRpbmdfcGFnZXNbdmFkZHJfcGFnZW5yKHJlcSwgc2VnKV0pOworCXJl dHVybiAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGZuKTsKK30KKworI2RlZmluZSBwZW5k aW5nX2hhbmRsZShfcmVxLCBfc2VnKSBcCisJKHBlbmRpbmdfZ3JhbnRfaGFuZGxlc1t2YWRkcl9w YWdlbnIoX3JlcSwgX3NlZyldKQorCisKK3N0YXRpYyB2b2lkIGZhc3RfZmx1c2hfYXJlYShwZW5k aW5nX3JlcV90ICpyZXEpCit7CisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgdW5tYXBb U0dfVEFCTEVTSVpFXTsKKwl1bnNpZ25lZCBpbnQgaSwgaW52Y291bnQgPSAwOworCWdyYW50X2hh bmRsZV90IGhhbmRsZTsKKwlpbnQgZXJyOworCisJaWYgKHJlcS0+dS5zY3NpLnVzZV9zZykgewor CQlmb3IgKGkgPSAwOyBpIDwgcmVxLT51LnNjc2kudXNlX3NnOyBpKyspIHsKKwkJCWhhbmRsZSA9 IHBlbmRpbmdfaGFuZGxlKHJlcSwgaSk7CisJCQlpZiAoaGFuZGxlID09IFNDU0lCQUNLX0lOVkFM SURfSEFORExFKQorCQkJCWNvbnRpbnVlOworCQkJZ250dGFiX3NldF91bm1hcF9vcCgmdW5tYXBb aV0sIHZhZGRyKHJlcSwgaSksCisJCQkJCQlHTlRNQVBfaG9zdF9tYXAsIGhhbmRsZSk7CisJCQlw ZW5kaW5nX2hhbmRsZShyZXEsIGkpID0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEU7CisJCQlpbnZj b3VudCsrOworCQl9CisKKwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCgKKwkJCUdO VFRBQk9QX3VubWFwX2dyYW50X3JlZiwgdW5tYXAsIGludmNvdW50KTsKKwkJQlVHX09OKGVycik7 CisJfSBlbHNlIGlmIChyZXEtPnUuc2NzaS5yZXF1ZXN0X2J1ZmZsZW4pIHsKKwkJaGFuZGxlID0g cGVuZGluZ19oYW5kbGUocmVxLCAwKTsKKwkJaWYgKGhhbmRsZSA9PSBTQ1NJQkFDS19JTlZBTElE X0hBTkRMRSkKKwkJCXJldHVybjsKKwkJZ250dGFiX3NldF91bm1hcF9vcCgmdW5tYXBbMF0sIHZh ZGRyKHJlcSwgMCksCisJCQkJCUdOVE1BUF9ob3N0X21hcCwgaGFuZGxlKTsKKwkJcGVuZGluZ19o YW5kbGUocmVxLCAwKSA9IFNDU0lCQUNLX0lOVkFMSURfSEFORExFOworCisJCWVyciA9IEhZUEVS VklTT1JfZ3JhbnRfdGFibGVfb3AoCisJCQlHTlRUQUJPUF91bm1hcF9ncmFudF9yZWYsIHVubWFw LCAxKTsKKwkJQlVHX09OKGVycik7CisJfQorCQorCXJldHVybjsKK30KKworCitzdGF0aWMgdm9p ZCBtYWtlX3NlbnNlKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8sIHN0cnVjdCByZXF1ZXN0ICpy ZXEsCisJCQkJCWludDMyX3QgcmVzdWx0LCB1aW50NjRfdCBycWlkKQoreworCXN0cnVjdCB2c2Nz aWlmX2J0Zl9yZXF1ZXN0ICpidGZfcmVxOworCisJRFBSSU5USygiJXNcbiIsX19GVU5DVElPTl9f KTsKKwkKKwlidGZfcmVxID0gY29tYmFja19wcmVfcmVwbHkoaW5mbyk7CisKKwltZW1zZXQoYnRm X3JlcS0+dS5zY3NpLnNlbnNlX2J1ZmZlciwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwor CWJ0Zl9yZXEtPnJzbHQgICA9IHJlc3VsdDsKKwlidGZfcmVxLT5ycWlkICAgPSBycWlkOworCisJ aWYgKHJlc3VsdCAhPSAwICYmIHJlcSAhPSBOVUxMICkgeworCQltZW1jcHkoYnRmX3JlcS0+dS5z Y3NpLnNlbnNlX2J1ZmZlciwgcmVxLT5zZW5zZSwgcmVxLT5zZW5zZV9sZW4pOworCQlidGZfcmVx LT51LnNjc2kuc2Vuc2VfbGVuID0gcmVxLT5zZW5zZV9sZW47CisJfSBlbHNlCisJCWJ0Zl9yZXEt PnUuc2NzaS5zZW5zZV9sZW4gPSAwOworCisJY29tYmFja19kb19yZXBseShpbmZvKTsKKworfQor CisKK3N0YXRpYyB2b2lkIHNjc2liYWNrX2VuZF9jbWRfZm4oc3RydWN0IHJlcXVlc3QgKnJlcSwg aW50IGVycm9yKQoreworCXVuc2lnbmVkIGNoYXIgc2Vuc2VfYnVmZmVyW1NDU0lfU0VOU0VfQlVG RkVSU0laRV07CisJcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEgPSByZXEtPmVuZF9pb19kYXRh OworCXBlbmRpbmdfcmVxLT51LnNjc2kucnEgPSByZXE7CisKKwlEUFJJTlRLKCIlc1xuIixfX0ZV TkNUSU9OX18pOworCisJaWYgKHJlcS0+ZXJyb3JzICE9IDApIHsKKworCQlwcmludGsoInNjc2li YWNrOiBTQ1NJIENNRCByZXR1cm4uIHJlcS0+ZXJyb3JzID0gMHglMDh4XG4iLAorCQkJCQkJCQly ZXEtPmVycm9ycyk7CisJCXByaW50aygic2NzaWJhY2s6IHN0YXR1cyA9IDB4JTAyeCwgbWVzc2Fn ZSA9IDB4JTAyeCwgaG9zdCA9IDB4JTAyeCwgZHJpdmVyID0gMHglMDJ4XG4iLAorCQkJCXN0YXR1 c19ieXRlKHJlcS0+ZXJyb3JzKSwgbXNnX2J5dGUocmVxLT5lcnJvcnMpLAorCQkJCWhvc3RfYnl0 ZShyZXEtPmVycm9ycyksIGRyaXZlcl9ieXRlKHJlcS0+ZXJyb3JzKSk7CisJCW1lbWNweShzZW5z ZV9idWZmZXIsIHJlcS0+c2Vuc2UsIHJlcS0+c2Vuc2VfbGVuKTsKKwkJX19zY3NpX3ByaW50X3Nl bnNlKCJzY3NpYmFjayIsIHNlbnNlX2J1ZmZlciwgcmVxLT5zZW5zZV9sZW4pOworCQkKKwl9CisK KwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGVuZGluZ19yZXEtPnUuc2NzaS5wZW5kY250KSkg eworCQlmYXN0X2ZsdXNoX2FyZWEocGVuZGluZ19yZXEpOworCQltYWtlX3NlbnNlKHBlbmRpbmdf cmVxLT5pbmZvLCBwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLCAKKwkJCQlyZXEtPmVycm9ycywgcGVu ZGluZ19yZXEtPnUuc2NzaS5ycWlkKTsKKwkJc2NzaWJhY2tfcHV0KHBlbmRpbmdfcmVxLT5pbmZv KTsKKwkJZnJlZV9yZXEocGVuZGluZ19yZXEpOworCX0KKworCV9fYmxrX3B1dF9yZXF1ZXN0KHJl cS0+cSwgcmVxKTsKKworfQorCisKKy8qIHF1b3RlZCBzY3NpX2xpYi5jL3Njc2lfbWVyZ2VfYmlv ICovCitzdGF0aWMgaW50IHNjc2liYWNrX21lcmdlX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0 cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOworCisJ YmlvLT5iaV9mbGFncyAmPSB+KDEgPDwgQklPX1NFR19WQUxJRCk7CisJaWYgKHJxX2RhdGFfZGly KHJxKSA9PSBXUklURSkKKwkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUlcpOworCisJYmxrX3F1 ZXVlX2JvdW5jZShxLCAmYmlvKTsKKworCWlmICghcnEtPmJpbykKKwkJYmxrX3JxX2Jpb19wcmVw KHEsIHJxLCBiaW8pOworCWVsc2UgaWYgKCFxLT5iYWNrX21lcmdlX2ZuKHEsIHJxLCBiaW8pKQor CQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJcnEtPmJpb3RhaWwtPmJpX25leHQgPSBiaW87 CisJCXJxLT5iaW90YWlsICAgICAgICAgID0gYmlvOworCQlycS0+aGFyZF9ucl9zZWN0b3JzICs9 IGJpb19zZWN0b3JzKGJpbyk7CisJCXJxLT5ucl9zZWN0b3JzICAgICAgID0gcnEtPmhhcmRfbnJf c2VjdG9yczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBxdW90ZWQgc2NzaV9saWIuYy9z Y3NpX2JpX2VuZGlvICovCitzdGF0aWMgaW50IHNjc2liYWNrX2JpX2VuZGlvKHN0cnVjdCBiaW8g KmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKK3sKKwlpZiAoYmlvLT5i aV9zaXplKQorCQlyZXR1cm4gMTsKKworCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gMDsKK30KKwor CisvKiBxdW90ZWQgc2NzaV9saWIuYy9zY3NpX3JlcV9tYXBfc2cgLiAqLworc3RhdGljIGludCBy ZXF1c2V0X21hcF9zZyhwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSwgaW50IGNvdW50KQorewor CXN0cnVjdCByZXF1ZXN0ICpycSA9IHBlbmRpbmdfcmVxLT51LnNjc2kucnE7CisJc3RydWN0IHJl cXVlc3RfcXVldWUgKnEgPSBwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5xOworCWludCBucl9wYWdl czsKKwlpbnQgbnNlZ3MgPSBjb3VudDsKKworCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IDAsIGxl biwgYnl0ZXMsIG9mZjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBO VUxMOworCWludCBpLCBlcnIsIG5yX3ZlY3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5zZWdz OyBpKyspIHsKKwkJcGFnZSA9IHZpcnRfdG9fcGFnZSh2YWRkcihwZW5kaW5nX3JlcSwgaSkpOwor CisJCW9mZiA9IHBlbmRpbmdfcmVxLT51LnNjc2kucGVuZF9zZWdbaV0ub2Zmc2V0OworCQlsZW4g PSBwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRfc2VnW2ldLmxlbmd0aDsKKwkJZGF0YV9sZW4gKz0g bGVuOworCisJCW5yX3BhZ2VzID0gKGxlbiArIG9mZiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0Vf U0hJRlQ7CisKKwkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCWJ5dGVzID0gbWluX3QodW5zaWduZWQg aW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7CisKKwkJCWlmICghYmlvKSB7CisJCQkJbnJfdmVj cyA9IG1pbl90KGludCwgQklPX01BWF9QQUdFUywgbnJfcGFnZXMpOworCQkJCW5yX3BhZ2VzIC09 IG5yX3ZlY3M7CisJCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIG5yX3ZlY3MpOworCQkJ CWlmICghYmlvKSB7CisJCQkJCWVyciA9IC1FTk9NRU07CisJCQkJCWdvdG8gZnJlZV9iaW9zOwor CQkJCX0KKwkJCQliaW8tPmJpX2VuZF9pbyA9IHNjc2liYWNrX2JpX2VuZGlvOworCQkJfQorCisJ CQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgYnl0ZXMsIG9mZikgIT0KKwkJCQkJ CWJ5dGVzKSB7CisJCQkJYmlvX3B1dChiaW8pOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290 byBmcmVlX2Jpb3M7CisJCQl9CisKKwkJCWlmIChiaW8tPmJpX3ZjbnQgPj0gbnJfdmVjcykgewor CQkJCWVyciA9IHNjc2liYWNrX21lcmdlX2JpbyhycSwgYmlvKTsKKwkJCQlpZiAoZXJyKSB7CisJ CQkJCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgMCk7CisJCQkJCWdvdG8gZnJlZV9iaW9z OworCQkJCX0KKwkJCQliaW8gPSBOVUxMOworCQkJfQorCisJCQlwYWdlKys7CisJCQlsZW4gLT0g Ynl0ZXM7CisJCQlvZmYgPSAwOworCQl9CisJfQorCisJcnEtPmJ1ZmZlciAgID0gcnEtPmRhdGEg PSBOVUxMOworCXJxLT5kYXRhX2xlbiA9IGRhdGFfbGVuOworCXJldHVybiAwOworCitmcmVlX2Jp b3M6CisJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKSB7CisJCXJxLT5iaW8gPSBiaW8t PmJpX25leHQ7CisJCS8qCisJCSAqIGNhbGwgZW5kaW8gaW5zdGVhZCBvZiBiaW9fcHV0IGluY2Fz ZSBpdCB3YXMgYm91bmNlZAorCQkgKi8KKwkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCAw KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvLwlzdGF0aWMgaW50IGNvcHlfcmVxdWVzdF9y aW5nX2luZm8oc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbywKK2ludCBjb3B5X3JlcXVlc3Rfcmlu Z19pbmZvKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8sCisJCXN0cnVjdCB2c2NzaWlmX2Z0Yl9y ZXF1ZXN0ICpmdGJfcmVxLCBwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlpbnQgd3Jp dGU7CisJY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCWludCBpOworCisJRFBS SU5USygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCXBlbmRpbmdfcmVxLT51LnNjc2kucnFpZCAg ID0gZnRiX3JlcS0+cnFpZDsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYgICA9IHNjc2lfZGV2 aWNlX2xvb2t1cChpbmZvLT5ob3N0LAorCQkJIGZ0Yl9yZXEtPnUuc2NzaS5jaGFubmVsLCBmdGJf cmVxLT51LnNjc2kuaWQsIGZ0Yl9yZXEtPnUuc2NzaS5sdW4pOworCWlmICghcGVuZGluZ19yZXEt PnUuc2NzaS5zZGV2KSB7CisJCWdvdG8gZmFpbF9yZXNwb25zZTsKKwl9CisKKwl3cml0ZSA9IChm dGJfcmVxLT51LnNjc2kuc2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSk7CisJcGVu ZGluZ19yZXEtPnUuc2NzaS5kYXRhX2RpciA9IGZ0Yl9yZXEtPnUuc2NzaS5zY19kYXRhX2RpcmVj dGlvbjsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxICAgICAgID0KKwkJCWJsa19nZXRfcmVxdWVz dChwZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYtPnJlcXVlc3RfcXVldWUsCisJCQkJCQkJd3JpdGUs IEdGUF9LRVJORUwpOworCXBlbmRpbmdfcmVxLT5pbmZvICAgPSBpbmZvOworCXBlbmRpbmdfcmVx LT51LnNjc2kudXNlX3NnID0gZnRiX3JlcS0+dS5zY3NpLnVzZV9zZzsKKwlwZW5kaW5nX3JlcS0+ dS5zY3NpLnJlcXVlc3RfYnVmZmxlbiA9IGZ0Yl9yZXEtPnUuc2NzaS5yZXF1ZXN0X2J1ZmZsZW47 CisKKworCXBlbmRpbmdfcmVxLT51LnNjc2kucnEtPmZsYWdzICB8PSBSRVFfQkxPQ0tfUEM7CisJ cGVuZGluZ19yZXEtPnUuc2NzaS5ycS0+Y21kX2xlbiA9IGZ0Yl9yZXEtPnUuc2NzaS5jbWRfbGVu OworCW1lbWNweShwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5jbWQsIGZ0Yl9yZXEtPnUuc2NzaS5j bW5kLAorCQkgICBmdGJfcmVxLT51LnNjc2kuY21kX2xlbik7CisKKwltZW1zZXQoc2Vuc2UsIDAs IHNpemVvZihzZW5zZSkpOyAvKkZJWE1FKi8KKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5zZW5z ZSAgICAgPSBzZW5zZTsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5zZW5zZV9sZW4gPSBTQ1NJ X1NFTlNFX0JVRkZFUlNJWkU7CisKKy8qCXBlbmRpbmdfcmVxLT51LnNjc2kucnEtPnJldHJpZXMg ICA9IGZ0Yl9yZXEtPnUuc2NzaS5yZXRyaWVzOyovCisJcGVuZGluZ19yZXEtPnUuc2NzaS5ycS0+ cmV0cmllcyAgID0gMDsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT50aW1lb3V0ICAgPSBmdGJf cmVxLT51LnNjc2kudGltZW91dF9wZXJfY29tbWFuZDsKKworCXBlbmRpbmdfcmVxLT51LnNjc2ku cnEtPmVuZF9pb19kYXRhID0gcGVuZGluZ19yZXE7CisKKwlpZiAoZnRiX3JlcS0+dS5zY3NpLnVz ZV9zZykgeworCQlmb3IgKGkgPSAwOyBpIDwgZnRiX3JlcS0+dS5zY3NpLnVzZV9zZzsgaSsrKSB7 CisJCQlwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRfc2VnW2ldLmdyZWYgICA9IGZ0Yl9yZXEtPnUu c2NzaS5zZWdbaV0uZ3JlZjsKKwkJCXBlbmRpbmdfcmVxLT51LnNjc2kucGVuZF9zZWdbaV0ub2Zm c2V0ID0gZnRiX3JlcS0+dS5zY3NpLnNlZ1tpXS5vZmZzZXQ7CisJCQlwZW5kaW5nX3JlcS0+dS5z Y3NpLnBlbmRfc2VnW2ldLmxlbmd0aCA9IGZ0Yl9yZXEtPnUuc2NzaS5zZWdbaV0ubGVuZ3RoOwor CQl9CisJfSBlbHNlIGlmIChmdGJfcmVxLT51LnNjc2kucmVxdWVzdF9idWZmbGVuKSB7CisJCXBl bmRpbmdfcmVxLT51LnNjc2kucGVuZF9zZWdbMF0uZ3JlZiAgID0gZnRiX3JlcS0+dS5zY3NpLnNl Z1swXS5ncmVmOworCQlwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRfc2VnWzBdLm9mZnNldCA9IGZ0 Yl9yZXEtPnUuc2NzaS5zZWdbMF0ub2Zmc2V0OworCQlwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRf c2VnWzBdLmxlbmd0aCA9IGZ0Yl9yZXEtPnUuc2NzaS5zZWdbMF0ubGVuZ3RoOworCX0KKwkKKwly ZXR1cm4gMDsKKworZmFpbF9yZXNwb25zZToKKwlyZXR1cm4gMTsKK30KKworCit2b2lkIHNjc2li YWNrX2NtZF9leGVjKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxKQoreworCisJc3RydWN0IGdu dHRhYl9tYXBfZ3JhbnRfcmVmIG1hcFtTR19UQUJMRVNJWkVdOworCXN0cnVjdCBjb21iYWNrX2lu Zm8gKmluZm8gPSBwZW5kaW5nX3JlcS0+aW5mbzsKKwkKKwlpbnQgd3JpdGUgPSAocGVuZGluZ19y ZXEtPnUuc2NzaS5kYXRhX2RpciA9PSBETUFfVE9fREVWSUNFKTsKKwl1MzIgZmxhZ3M7CisJaW50 IGksIGVyciA9IDA7CisKKwlEUFJJTlRLKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaWYgKCFw ZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYpIHsKKwkJZ290byBmYWlsX3Jlc3BvbnNlOworCX0KKwor CWlmIChwZW5kaW5nX3JlcS0+dS5zY3NpLnVzZV9zZykgeworCisJCWZvciAoaSA9IDA7IGkgPCBw ZW5kaW5nX3JlcS0+dS5zY3NpLnVzZV9zZzsgaSsrKSB7CisJCQlmbGFncyA9IEdOVE1BUF9ob3N0 X21hcDsKKwkJCWlmICh3cml0ZSkKKwkJCQlmbGFncyB8PSBHTlRNQVBfcmVhZG9ubHk7CisJCQln bnR0YWJfc2V0X21hcF9vcCgmbWFwW2ldLCB2YWRkcihwZW5kaW5nX3JlcSwgaSksIGZsYWdzLAor CQkJCQkJcGVuZGluZ19yZXEtPnUuc2NzaS5wZW5kX3NlZ1tpXS5ncmVmLAorCQkJCQkJaW5mby0+ ZG9taWQpOworCQl9CisKKwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJP UF9tYXBfZ3JhbnRfcmVmLAorCQkJCQkJbWFwLCBwZW5kaW5nX3JlcS0+dS5zY3NpLnVzZV9zZyk7 CisJCUJVR19PTihlcnIpOworCisJCWZvciAoaSA9IDA7IGkgPCBwZW5kaW5nX3JlcS0+dS5zY3Np LnVzZV9zZzsgaSsrKSB7CisJCQlpZiAodW5saWtlbHkobWFwW2ldLnN0YXR1cyAhPSAwKSkgewor CQkJCXByaW50ayhLRVJOX0VSUiAic2NzaWJhY2s6IGludmFsaWQgYnVmZmVyIC0tIGNvdWxkIG5v dCByZW1hcCBpdFxuIik7CisJCQkJbWFwW2ldLmhhbmRsZSA9IFNDU0lCQUNLX0lOVkFMSURfSEFO RExFOworCQkJCWVyciB8PSAxOworCQkJfQorCisJCQlwZW5kaW5nX2hhbmRsZShwZW5kaW5nX3Jl cSwgaSkgPSBtYXBbaV0uaGFuZGxlOworCisJCQlpZiAoZXJyKQorCQkJCWNvbnRpbnVlOworCisJ CQlzZXRfcGh5c190b19tYWNoaW5lKF9fcGEodmFkZHIoCisJCQkJcGVuZGluZ19yZXEsIGkpKSA+ PiBQQUdFX1NISUZULAorCQkJCUZPUkVJR05fRlJBTUUobWFwW2ldLmRldl9idXNfYWRkciA+PiBQ QUdFX1NISUZUKSk7CisJCX0KKworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX2ZsdXNoOworCisJ CWlmIChyZXF1c2V0X21hcF9zZyhwZW5kaW5nX3JlcSwgcGVuZGluZ19yZXEtPnUuc2NzaS51c2Vf c2cpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNjc2liYWNrOiBTRyBSZXF1ZXN0IE1hcCBFcnJv clxuIik7CisJCQlnb3RvIGZhaWxfbWFwOworCQl9CisKKwl9IGVsc2UgaWYgKHBlbmRpbmdfcmVx LT51LnNjc2kucmVxdWVzdF9idWZmbGVuKSB7CisKKwkJZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7 CisJCWlmICh3cml0ZSkKKwkJCWZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKwkJZ250dGFiX3Nl dF9tYXBfb3AoJm1hcFswXSwgdmFkZHIocGVuZGluZ19yZXEsIDApLCBmbGFncywKKwkJCQkJcGVu ZGluZ19yZXEtPnUuc2NzaS5wZW5kX3NlZ1swXS5ncmVmLAorCQkJCQlpbmZvLT5kb21pZCk7CisK KwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVm LCBtYXAsIDEpOworCQlCVUdfT04oZXJyKTsKKworCQlpZiAodW5saWtlbHkobWFwWzBdLnN0YXR1 cyAhPSAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpYmFjazogaW52YWxpZCBidWZmZXIg c2luZ2xlIC0tIGNvdWxkIG5vdCByZW1hcCBpdFxuIik7CisJCQltYXBbMF0uaGFuZGxlID0gU0NT SUJBQ0tfSU5WQUxJRF9IQU5ETEU7CisJCQllcnIgfD0gMTsKKwkJfQorCisJCXBlbmRpbmdfaGFu ZGxlKHBlbmRpbmdfcmVxLCAwKSA9IG1hcFswXS5oYW5kbGU7CisKKwkJc2V0X3BoeXNfdG9fbWFj aGluZShfX3BhKHZhZGRyKAorCQkJcGVuZGluZ19yZXEsIDApKSA+PiBQQUdFX1NISUZULAorCQkJ Rk9SRUlHTl9GUkFNRShtYXBbMF0uZGV2X2J1c19hZGRyID4+IFBBR0VfU0hJRlQpKTsKKworCQlp ZiAoZXJyKQorCQkJZ290byBmYWlsX2ZsdXNoOworCisJCWlmIChyZXF1c2V0X21hcF9zZyhwZW5k aW5nX3JlcSwgMSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2NzaWJhY2s6IFNHIFJlcXVlc3Qg TWFwIEVycm9yXG4iKTsKKwkJCWdvdG8gZmFpbF9tYXA7CisJCX0KKwl9CisKKwlhdG9taWNfc2V0 KCZwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRjbnQsIDEpOworCXNjc2liYWNrX2dldChpbmZvKTsK KworCWJsa19leGVjdXRlX3JxX25vd2FpdChwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5xLCBOVUxM LAorCQkJCQkJICBwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLCAxLCBzY3NpYmFja19lbmRfY21kX2Zu KTsKKworCXJldHVybiA7CisKK2ZhaWxfbWFwOgorZmFpbF9mbHVzaDoKKwlmYXN0X2ZsdXNoX2Fy ZWEocGVuZGluZ19yZXEpOworZmFpbF9yZXNwb25zZToKKwltYWtlX3NlbnNlKGluZm8sIE5VTEws IChESURfTk9fQ09OTkVDVCA8PCAxNiksIHBlbmRpbmdfcmVxLT51LnNjc2kucnFpZCk7CisJZnJl ZV9yZXEocGVuZGluZ19yZXEpOworCit9CisKKwordm9pZCBzY3NpYmFja19yZXNldF9leGVjKHBl bmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9 IHBlbmRpbmdfcmVxLT51LnNjc2kuc2RldjsKKwlzdHJ1Y3QgY29tYmFja19pbmZvICppbmZvID0g cGVuZGluZ19yZXEtPmluZm87CisJc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKnJpbmdfcmVz OworCWludCBlcnI7CisKKwllcnIgPSBzY3NpX3Jlc2V0X3Byb3ZpZGVyKHNkZXYsIFNDU0lfVFJZ X1JFU0VUX0hPU1QpOworCWlmIChlcnIgIT0gU1VDQ0VTUykKKwkJZXJyID0gc2NzaV9yZXNldF9w cm92aWRlcihzZGV2LCBTQ1NJX1RSWV9SRVNFVF9CVVMpOworCisJcmluZ19yZXMgPSBjb21iYWNr X3ByZV9yZXBseShpbmZvKTsKKworCXJpbmdfcmVzLT5ycWlkID0gcGVuZGluZ19yZXEtPnUuc2Nz aS5ycWlkOworCXJpbmdfcmVzLT5yc2x0ID0gZXJyOworCQorCWNvbWJhY2tfZG9fcmVwbHkoaW5m byk7CisKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBzY3NpYmFja19pbml0KHZvaWQpCit7CisJ aW50IGksIG1tYXBfcGFnZXM7CisKKwlpZiAoIWlzX3J1bm5pbmdfb25feGVuKCkpCisJCXJldHVy biAtRU5PREVWOworCisJbW1hcF9wYWdlcyA9IHZzY3NpaWZfcmVxcyAqIFNHX1RBQkxFU0laRTsK KworCXBlbmRpbmdfcmVxcyAgICAgICAgICA9IGttYWxsb2Moc2l6ZW9mKHBlbmRpbmdfcmVxc1sw XSkgKgorCQkJCQl2c2NzaWlmX3JlcXMsIEdGUF9LRVJORUwpOworCXBlbmRpbmdfZ3JhbnRfaGFu ZGxlcyA9IGttYWxsb2Moc2l6ZW9mKHBlbmRpbmdfZ3JhbnRfaGFuZGxlc1swXSkgKgorCQkJCQlt bWFwX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlwZW5kaW5nX3BhZ2VzICAgICAgICAgPSBhbGxvY19l bXB0eV9wYWdlc19hbmRfcGFnZXZlYyhtbWFwX3BhZ2VzKTsKKworCWlmICghcGVuZGluZ19yZXFz IHx8ICFwZW5kaW5nX2dyYW50X2hhbmRsZXMgfHwgIXBlbmRpbmdfcGFnZXMpCisJCWdvdG8gb3V0 X29mX21lbW9yeTsKKworCWZvciAoaSA9IDA7IGkgPCBtbWFwX3BhZ2VzOyBpKyspCisJCXBlbmRp bmdfZ3JhbnRfaGFuZGxlc1tpXSA9IFNDU0lCQUNLX0lOVkFMSURfSEFORExFOworCisJc2NzaWJh Y2tfaW50ZXJmYWNlX2luaXQoKTsKKworCW1lbXNldChwZW5kaW5nX3JlcXMsIDAsIHNpemVvZihw ZW5kaW5nX3JlcXMpKTsKKwlJTklUX0xJU1RfSEVBRCgmcGVuZGluZ19mcmVlKTsKKworCWZvciAo aSA9IDA7IGkgPCB2c2NzaWlmX3JlcXM7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmcGVuZGluZ19y ZXFzW2ldLnUuc2NzaS5mcmVlX2xpc3QsICZwZW5kaW5nX2ZyZWUpOworCisJaWYgKHNjc2lpZl94 ZW5idXNfaW5pdCgpKQorCQlnb3RvIG91dF9vZl9tZW1vcnk7CisKKwkodm9pZClzY3NpX3RyYWNl X2luaXQoKTsKKwkKKwlyZXR1cm4gMDsKKworIG91dF9vZl9tZW1vcnk6CisJa2ZyZWUocGVuZGlu Z19yZXFzKTsKKwlrZnJlZShwZW5kaW5nX2dyYW50X2hhbmRsZXMpOworCWZyZWVfZW1wdHlfcGFn ZXNfYW5kX3BhZ2V2ZWMocGVuZGluZ19wYWdlcywgbW1hcF9wYWdlcyk7CisJcHJpbnRrKEtFUk5f RVJSICJzY3NpYmFjazogJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0 dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzY3NpYmFja19leGl0KHZvaWQp Cit7CisJc2NzaWlmX3hlbmJ1c191bnJlZ2lzdGVyKCk7CisJc2NzaWJhY2tfaW50ZXJmYWNlX2V4 aXQoKTsKKwlzY3NpX3RyYWNlX2V4aXQoKTsKKwlrZnJlZShwZW5kaW5nX3JlcXMpOworCWtmcmVl KHBlbmRpbmdfZ3JhbnRfaGFuZGxlcyk7CisJZnJlZV9lbXB0eV9wYWdlc19hbmRfcGFnZXZlYyhw ZW5kaW5nX3BhZ2VzLCAodnNjc2lpZl9yZXFzICogU0dfVEFCTEVTSVpFKSk7Cit9CisKK21vZHVs ZV9pbml0KHNjc2liYWNrX2luaXQpOworbW9kdWxlX2V4aXQoc2NzaWJhY2tfZXhpdCk7CisKK01P RFVMRV9ERVNDUklQVElPTigiWGVuIFNDU0kgYmFja2VuZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNF TlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtciA5YmYxZGRkMGY2YmYgLXIgN2ZkNDkyOWY2YjIx IGRyaXZlcnMveGVuL3Njc2liYWNrL3RyYWNlYmFjay5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAw MSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL3RyYWNlYmFj ay5jCVRodSBPY3QgMTggMTg6NDc6NTMgMjAwNyArMDkwMApAQCAtMCwwICsxLDExMyBAQAorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNs dWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisvLyNpbmNs dWRlIDxhc20vZGVsYXkuaD4KKworCisjZGVmaW5lIE1BWF9EQVRBX1NJWkUJCTQ3MgkJLyogc2hv dWxkIGJlIG1vZGlmaWVkCSovCisJCQkJCQkvKiAgIGFjY29yZGluZyB0byBkYXRhCSovCisJCQkJ CQkvKiAgIHRvIGJlIHJlY29yZGVkCSovCisjZGVmaW5lIEVOVFJZX05VTQkJKDE2ICogMTAyNCkK Kworc3RydWN0IHNjc2lfdHJhY2VfZW50cnkgeworCXVuc2lnbmVkIGxvbmcJZGlyOwkJCS8qIGRp cmVjdGlvbgkJKi8KKwkJCQkJCS8qIDA6IHBlbmRpbmcoQkUpCSovCisJCQkJCQkvKiAxOiByZXF1 ZXN0KEZFKQkqLworCQkJCQkJLyogMjogcmVzcG9uc2UoRkUpCSovCisJdW5zaWduZWQgbG9uZwlz ZXJpYWw7CQkJLyogaW5jcmVtZW50YWwgY291bnRlciAgKi8KKwkJCQkJCS8qICAgc3RhcnRzIGF0 IDAgCSovCisJc3RydWN0IHRpbWV2YWwJdHY7CQkJLyogdGltZW9mZGF5CQkqLworLy8JdW5zaWdu ZWQgbG9uZwlpdGM7CQkJLyogaXRjCQkJKi8KKwl1bnNpZ25lZCBpbnQJc2l6ZTsJCQkvKiBkYXRh IHNpemUJCSovCisJdW5zaWduZWQgY2hhcglkYXRhW01BWF9EQVRBX1NJWkVdOwkvKiBkYXRhIGJv ZHkJCSovCit9OworCitzdGF0aWMgc3RydWN0IHNjc2lfdHJhY2VfZW50cnkJKnNjc2lfdHJhY2Vf YnVmOworRVhQT1JUX1NZTUJPTChzY3NpX3RyYWNlX2J1Zik7CQkJLyogZm9yIERVTVAJCSovCisK K3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NzaV90cmFjZV9sb2NrKTsKKwordm9pZAorc2NzaV90 cmFjZSh1bnNpZ25lZCBsb25nIGRpciwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50 IHNpemUpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcJaW5kZXggID0gMDsKKwlzdGF0aWMgdW5z aWduZWQgbG9uZwlzZXJpYWwgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKHNp emUgPiBNQVhfREFUQV9TSVpFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRhdGEgZ2l2ZW4g aXMgdG9vIGJpZy5cbiIKKwkJICAgICAgICJtdXN0IGJlIHNtYWxsZXIgdGhhbiAlZCBieXRlcy5c biIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIE1BWF9EQVRBX1NJWkUpOworCQlyZXR1cm47CisJ fQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfdHJhY2VfbG9jaywgZmxhZ3MpOworCisJc2Nz aV90cmFjZV9idWZbaW5kZXhdLmRpciAgICA9IGRpcjsKKwlkb19nZXR0aW1lb2ZkYXkoJihzY3Np X3RyYWNlX2J1ZltpbmRleF0udHYpKTsKKy8vCXNjc2lfdHJhY2VfYnVmW2luZGV4XS5pdGMgICAg PSBpYTY0X2dldF9pdGMoKTsKKwlzY3NpX3RyYWNlX2J1ZltpbmRleF0uc2l6ZSAgID0gc2l6ZTsK Ky8vCW1lbXNldChzY3NpX3RyYWNlX2J1ZltpbmRleF0uZGF0YSwgMCwgTUFYX0RBVEFfU0laRSk7 CisJbWVtY3B5KHNjc2lfdHJhY2VfYnVmW2luZGV4XS5kYXRhLCBkYXRhLCBzaXplKTsKKworCS8q IFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHJlY29yZCBpcyBzdWNjZXNzZnVsbHkgcmVjb3JkZWQg Ki8KKwlzY3NpX3RyYWNlX2J1ZltpbmRleF0uc2VyaWFsID0gc2VyaWFsKys7CisKKwlpbmRleCA9 IChpbmRleCArIDEpICUgRU5UUllfTlVNOworCQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNj c2lfdHJhY2VfbG9jaywgZmxhZ3MpOworCit9CisKK3N0YXRpYyBpbnQKK3Njc2lfdHJhY2VfcmVh ZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkgICAgIGludCBj b3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50CQlsZW4gPSBzaXplb2Yoc3RydWN0 IHNjc2lfdHJhY2VfZW50cnkpICogRU5UUllfTlVNOworICAgICAgICB1bnNpZ25lZCBsb25nCWZs YWdzOworCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3NpX3RyYWNlX2xvY2ssIGZsYWdz KTsKKworICAgICAgICBpZiAobGVuIDw9IG9mZiArIGNvdW50KSB7CisJCSplb2YgPSAxOworCX0K KyAgICAgICAgKnN0YXJ0ID0gcGFnZTsKKyAgICAgICAgbGVuIC09IG9mZjsKKyAgICAgICAgaWYg KGxlbiA+IGNvdW50KSB7CisJCWxlbiA9IGNvdW50OworCX0KKyAgICAgICAgaWYgKGxlbiA8IDAp IHsKKyAgICAgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIG1lbWNweShwYWdlLCAoKHVuc2lnbmVkIGNoYXIgKilzY3NpX3RyYWNlX2J1ZikgKyBv ZmYsIGxlbik7CisJfQorCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfdHJh Y2VfbG9jaywgZmxhZ3MpOworCisgICAgICAgIHJldHVybiBsZW47Cit9CisKK2ludCBfX2luaXQg c2NzaV90cmFjZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50CXNjc2lfdHJhY2VfYnVmX3Np emU7CisKKwlzY3NpX3RyYWNlX2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3NpX3RyYWNlX2Vu dHJ5KSAqIEVOVFJZX05VTTsKKwlpZiAoKHNjc2lfdHJhY2VfYnVmID0gdm1hbGxvYyhzY3NpX3Ry YWNlX2J1Zl9zaXplKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChzY3Np X3RyYWNlX2J1ZiwgMCwgc2NzaV90cmFjZV9idWZfc2l6ZSk7CisKKwljcmVhdGVfcHJvY19yZWFk X2VudHJ5KCJzY3NpX3RyYWNlIiwgMCwgTlVMTCwKKwkJCSAgICAgICBzY3NpX3RyYWNlX3JlYWRf cHJvYywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2V4aXQgc2NzaV90cmFjZV9l eGl0KHZvaWQpCit7CisJdmZyZWUoc2NzaV90cmFjZV9idWYpOworCXJlbW92ZV9wcm9jX2VudHJ5 KCJzY3NpX3RyYWNlIiwgTlVMTCk7Cit9CisKZGlmZiAtciA5YmYxZGRkMGY2YmYgLXIgN2ZkNDky OWY2YjIxIGRyaXZlcnMveGVuL3Njc2liYWNrL3hlbmJ1cy5jCi0tLSAvZGV2L251bGwJVGh1IEph biAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL3hlbmJ1 cy5jCVRodSBPY3QgMTggMTg6NDc6NTMgMjAwNyArMDkwMApAQCAtMCwwICsxLDMwMSBAQAorLyoK KyAqIFhlbiBTQ1NJIGJhY2tlbmQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBG VUpJVFNVIExpbWl0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgYmxrYmFjayBkcml2ZXIgY29kZS4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVs eSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNv ZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqIAor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0 d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+ CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNp bmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisjaW5j bHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3Bv cnRfZmMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29tYmFjay5oIgorCitleHRlcm4gaW50IGNv bWJhY2tfc2NoZWR1bGUodm9pZCAqKTsKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCitleHRlcm4gaW50 IGZjYmFja19jb25uZWN0aW9uX3NldHVwKHN0cnVjdCBjb21iYWNrX2luZm8gKmNvbWluZm8pOwor I2VuZGlmCisKK3N0cnVjdCBiYWNrZW5kX2luZm8KK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAq ZGV2OworCXN0cnVjdCBjb21iYWNrX2luZm8gKmluZm87CisJc3RydWN0IHhlbmJ1c193YXRjaCBi YWNrZW5kX3dhdGNoOworfTsKKworCitzdGF0aWMgaW50IHNjc2liYWNrX3JlbW92ZShzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYWNrZW5kX2luZm8gKmJlID0gZGV2LT5k ZXYuZHJpdmVyX2RhdGE7CisKKwlpZiAoYmUtPmJhY2tlbmRfd2F0Y2gubm9kZSkgeworCQl1bnJl Z2lzdGVyX3hlbmJ1c193YXRjaCgmYmUtPmJhY2tlbmRfd2F0Y2gpOworCQlrZnJlZShiZS0+YmFj a2VuZF93YXRjaC5ub2RlKTsKKwkJYmUtPmJhY2tlbmRfd2F0Y2gubm9kZSA9IE5VTEw7CisJfQor CisJaWYgKGJlLT5pbmZvKSB7CisJCXNjc2liYWNrX2Rpc2Nvbm5lY3QoYmUtPmluZm8pOworCQlz Y3NpYmFja19mcmVlKGJlLT5pbmZvKTsKKwkJYmUtPmluZm8gPSBOVUxMOworCX0KKworCWtmcmVl KGJlKTsKKwlkZXYtPmRldi5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzY3NpaWZfbmFtZShzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSwgY2hhciAqYnVm KQoreworCWNoYXIgKmRldnBhdGg7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5k ZXY7CisKKwlkZXZwYXRoID0geGVuYnVzX3JlYWQoWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwgImhv c3RubyIsIE5VTEwpOworCWlmIChJU19FUlIoZGV2cGF0aCkpIAorCQlyZXR1cm4gUFRSX0VSUihk ZXZwYXRoKTsKKwkKKwlzbnByaW50ZihidWYsIFRBU0tfQ09NTV9MRU4sICJzY3NpaWYuJWQuJXMi LCBiZS0+aW5mby0+ZG9taWQsIGRldnBhdGgpOworCWtmcmVlKGRldnBhdGgpOworCQorCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHNjc2liYWNrX2Nvbm5lY3Qoc3RydWN0IGJhY2tlbmRfaW5m byAqYmUpCit7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5kZXY7CisJdW5zaWdu ZWQgbG9uZyBmdGJfcmluZ19yZWYsIGJ0Zl9yaW5nX3JlZjsKKwl1bnNpZ25lZCBpbnQgZXZ0Y2hu OworCWludCBlcnI7CisJY2hhciBuYW1lW1RBU0tfQ09NTV9MRU5dOworCisJZXJyID0geGVuYnVz X2dhdGhlcihYQlRfTklMLCBkZXYtPm90aGVyZW5kLAorCQkJImZ0Yi1yaW5nLXJlZiIsICIlbHUi LCAmZnRiX3JpbmdfcmVmLAorCQkJImJ0Zi1yaW5nLXJlZiIsICIlbHUiLCAmYnRmX3JpbmdfcmVm LAorCQkJImV2ZW50LWNoYW5uZWwiLCAiJXUiLCAmZXZ0Y2huLCBOVUxMKTsKKwlpZiAoZXJyKSB7 CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nICVzIHJpbmciLCBkZXYtPm90 aGVyZW5kKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzY3NpYmFja19pbml0X3NyaW5n KGJlLT5pbmZvLAorCQkJCWZ0Yl9yaW5nX3JlZiwgYnRmX3JpbmdfcmVmLCBldnRjaG4pOworCWlm IChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzY3NpaWZfbmFtZShiZSwgbmFtZSk7CisJ aWYgKGVycikgeworCQl4ZW5idXNfZGV2X2Vycm9yKGRldiwgZXJyLCAiZ2V0IHNjc2liYWNrIGRl diBuYW1lIik7CisJCXJldHVybiBlcnI7CisJfQorCisvLwliZS0+aW5mby0+a3RocmVhZCA9IGt0 aHJlYWRfcnVuKHNjc2liYWNrX3NjaGVkdWxlLCBiZS0+aW5mbywgbmFtZSk7CisJYmUtPmluZm8t Pmt0aHJlYWQgPSBrdGhyZWFkX3J1bihjb21iYWNrX3NjaGVkdWxlLCBiZS0+aW5mbywgbmFtZSk7 CisJaWYgKElTX0VSUihiZS0+aW5mby0+a3RocmVhZCkpIHsKKwkJZXJyID0gUFRSX0VSUihiZS0+ aW5mby0+a3RocmVhZCk7CisJCWJlLT5pbmZvLT5rdGhyZWFkID0gTlVMTDsKKwkJeGVuYnVzX2Rl dl9lcnJvcihiZS0+ZGV2LCBlcnIsICJzdGFydCBzY3NpaWYiKTsKKwkJcmV0dXJuIGVycjsKKwl9 CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJeworCQlpbnQJCXJldDsKKworCQlpZiAoKHJldCA9 IGZjYmFja19jb25uZWN0aW9uX3NldHVwKGJlLT5pbmZvKSkgIT0gMCkgeworCQkJcHJpbnRrKEtF Uk5fRVJSICJzY3NpYmFjazogJXM6IGZjYmFja19zZXR1cCgpIGVycm9yPj4+XG4iLAorCQkJCSAg IF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorI2VuZGlmCisJCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjc2liYWNrX2Zyb250ZW5kX2NoYW5nZWQoc3RydWN0 IHhlbmJ1c19kZXZpY2UgKmRldiwKKwkJCQkJZW51bSB4ZW5idXNfc3RhdGUgZnJvbnRlbmRfc3Rh dGUpCit7CisJc3RydWN0IGJhY2tlbmRfaW5mbyAqYmUgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsK KwlpbnQgZXJyOworCisJc3dpdGNoIChmcm9udGVuZF9zdGF0ZSkgeworCWNhc2UgWGVuYnVzU3Rh dGVJbml0aWFsaXNpbmc6CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2Vk OgorCWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisJCWlmIChkZXYtPnN0YXRlID09IFhlbmJ1 c1N0YXRlQ29ubmVjdGVkKQorCQkJYnJlYWs7CisKKwkJZXJyID0gc2NzaWJhY2tfY29ubmVjdChi ZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQllcnIgPSB4ZW5idXNfc3dpdGNoX3N0YXRl KGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOworCQlpZiAoZXJyKQorCQkJeGVuYnVzX2Rldl9m YXRhbChkZXYsIGVyciwgInN3aXRjaGluZyB0byBDb25uZWN0ZWQgc3RhdGUiLAorCQkJCQlkZXYt Pm5vZGVuYW1lKTsKKwkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKKwkJc2Nz aWJhY2tfZGlzY29ubmVjdChiZS0+aW5mbyk7CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBY ZW5idXNTdGF0ZUNsb3NpbmcpOworCQlicmVhazsKKworCWNhc2UgWGVuYnVzU3RhdGVDbG9zZWQ6 CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNsb3NlZCk7CisJCWlmICh4 ZW5idXNfZGV2X2lzX29ubGluZShkZXYpKQorCQkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRl VW5rbm93bjoKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIC1FSU5WQUwsICJzYXcgc3RhdGUgJWQgYXQg ZnJvbnRlbmQiLAorCQkJCQlmcm9udGVuZF9zdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworCitz dGF0aWMgdm9pZCBzY3NpYmFja19iYWNrZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAq d2F0Y2gsCisJCQkJCWNvbnN0IGNoYXIgKip2ZWMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50 IGVycjsKKwlzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSA9CisJCWNvbnRhaW5lcl9vZih3YXRjaCwg c3RydWN0IGJhY2tlbmRfaW5mbywgYmFja2VuZF93YXRjaCk7CisJc3RydWN0IHhlbmJ1c19kZXZp Y2UgKmRldiA9IGJlLT5kZXY7CisKKwlwcmludGsoIiVzIFNDU0lfUklOR19TSVpFX2Z0Yj0lbGRc biIsIF9fRlVOQ1RJT05fXywKKwkJX19SSU5HX1NJWkUoKHN0cnVjdCB2c2NzaWlmX2Z0Yl9zcmlu ZyAqKTAsIFBBR0VfU0laRSkpOworCXByaW50aygiJXMgU0NTSV9SSU5HX1NJWkVfYnRmPSVsZFxu IiwgX19GVU5DVElPTl9fLAorCQlfX1JJTkdfU0laRSgoc3RydWN0IHZzY3NpaWZfYnRmX3NyaW5n ICopMCwgUEFHRV9TSVpFKSk7CisKKwliZS0+aW5mby0+aG9zdCA9IHNjc2lfaG9zdF9sb29rdXAo YmUtPmluZm8tPmhvc3Rfbm8pOworCWlmIChJU19FUlIoYmUtPmluZm8tPmhvc3QpKSB7CisJCWVy ciA9IFBUUl9FUlIoYmUtPmluZm8tPmhvc3QpOworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJy LCAibm8gbG9va3VwIHNjc2kgaG9zdCIpOworCQlnb3RvIGZhaWw7CisJfQorCQorCXJldHVybjsK K2ZhaWw6CisJc2NzaWJhY2tfcmVtb3ZlKGRldik7Cit9CisKKworc3RhdGljIGludCBzY3NpYmFj a19wcm9iZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHhl bmJ1c19kZXZpY2VfaWQgKmlkKQoreworCWludCBlcnI7CisJaW50IGhvc3RubzsKKwlzdHJ1Y3Qg YmFja2VuZF9pbmZvICpiZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiYWNrZW5kX2luZm8pLAor CQkJCQkgIEdGUF9LRVJORUwpOworCisJRFBSSU5USygiJXAgJWRcbiIsIGRldiwgZGV2LT5vdGhl cmVuZF9pZCk7CisKKwlpZiAoIWJlKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PTUVN LAorCQkJCSAiYWxsb2NhdGluZyBiYWNrZW5kIHN0cnVjdHVyZSIpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisJYmUtPmRldiA9IGRldjsKKwlkZXYtPmRldi5kcml2ZXJfZGF0YSA9IGJlOworCisJ YmUtPmluZm8gPSBzY3NpaW5mb19hbGxvYyhkZXYtPm90aGVyZW5kX2lkKTsKKwlpZiAoSVNfRVJS KGJlLT5pbmZvKSkgeworCQllcnIgPSBQVFJfRVJSKGJlLT5pbmZvKTsKKwkJYmUtPmluZm8gPSBO VUxMOworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAiY3JlYXRpbmcgc2NzaWhvc3QgaW50 ZXJmYWNlIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwliZS0+aW5mby0+ZGV2ID0gZGV2OworCWJl LT5pbmZvLT5pcnEgPSAwOworCisJZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+bm9k ZW5hbWUsICJob3N0bm8iLCAiJWQiLCAmaG9zdG5vKTsKKwlpZiAoZXJyID09IC1FTk9FTlQgKSB7 CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2liYWNrOiBlcnJvciB4ZW5idXNfc2NhbmYgaG9z dG5vPSVkXG4iLGhvc3Rubyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwliZS0+aW5mby0+aG9zdF9u byA9ICh1bnNpZ25lZCBzaG9ydClob3N0bm87CisJCisJZXJyID0geGVuYnVzX3dhdGNoX3BhdGgy KGRldiwgZGV2LT5ub2RlbmFtZSwKKwkJCQkic2NzaS1ob3N0IiwKKwkJCQkmYmUtPmJhY2tlbmRf d2F0Y2gsCisJCQkJc2NzaWJhY2tfYmFja2VuZF9jaGFuZ2VkKTsKKwlpZiAoZXJyKQorCQlnb3Rv IGZhaWw7CisKKwllcnIgPSB4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVJbml0 V2FpdCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJ cHJpbnRrKEtFUk5fV0FSTklORyAic2NzaWJhY2s6ICVzIGZhaWxlZFxuIixfX0ZVTkNUSU9OX18p OworCXNjc2liYWNrX3JlbW92ZShkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMg c3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgc2NzaWJhY2tfaWRzW10gPSB7CisJeyAic2NzaWhvc3Qi IH0sCisJeyAiIiB9Cit9OworCitzdGF0aWMgc3RydWN0IHhlbmJ1c19kcml2ZXIgc2NzaWJhY2sg PSB7CisJLm5hbWUJCQk9ICJzY3NpaG9zdCIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwku aWRzCQkJPSBzY3NpYmFja19pZHMsCisJLnByb2JlCQkJPSBzY3NpYmFja19wcm9iZSwKKwkucmVt b3ZlCQkJPSBzY3NpYmFja19yZW1vdmUsCisJLm90aGVyZW5kX2NoYW5nZWQJPSBzY3NpYmFja19m cm9udGVuZF9jaGFuZ2VkCit9OworCitpbnQgc2NzaWlmX3hlbmJ1c19pbml0KHZvaWQpCit7CisJ cmV0dXJuIHhlbmJ1c19yZWdpc3Rlcl9iYWNrZW5kKCZzY3NpYmFjayk7Cit9CisKK3ZvaWQgc2Nz aWlmX3hlbmJ1c191bnJlZ2lzdGVyKHZvaWQpCit7CisJeGVuYnVzX3VucmVnaXN0ZXJfZHJpdmVy KCZzY3NpYmFjayk7Cit9CmRpZmYgLXIgOWJmMWRkZDBmNmJmIC1yIDdmZDQ5MjlmNmIyMSBpbmNs dWRlL3hlbi9pbnRlcmZhY2UvaW8vdnNjc2lpZi5oCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAw MDowMDowMCAxOTcwICswMDAwCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby92c2NzaWlm LmgJVGh1IE9jdCAxOCAxODo0Nzo1MyAyMDA3ICswOTAwCkBAIC0wLDAgKzEsMjM5IEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBzY3NpaWYuaAorICogCisgKiBCYXNlZCBvbiB0aGUgYmxr aWYuaCBjb2RlLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg dG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl IFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAq IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0KGMpIEZVSklUU1UgTGltaXRl ZCAyMDA3LgorICovCisKKyNpZm5kZWYgX19YRU5fX1BVQkxJQ19JT19TQ1NJX0hfXworI2RlZmlu ZSBfX1hFTl9fUFVCTElDX0lPX1NDU0lfSF9fCisKKyNpbmNsdWRlICJyaW5nLmgiCisjaW5jbHVk ZSAiLi4vZ3JhbnRfdGFibGUuaCIKKworI2lmZGVmIENPTkZJR19YRU5fRkMKKyNpbmNsdWRlIDxz Y3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5o PgorI2VuZGlmCisKKyNkZWZpbmUgQ01ORF9TQ1NJCQkJMQkvKiBzY3NpICovCisjZGVmaW5lIENN TkRfU0NTSV9SRVNFVAkJCTIJLyogc2NzaSAqLworCisjaWZkZWYgQ09ORklHX1hFTl9GQworI2Rl ZmluZSBDTU5EX0dFVF9IT1NUX1BPUlRfSUQJCTEwMQkvKiBnaHBpICovCisjZGVmaW5lIENNTkRf R0VUX0hPU1RfUE9SVF9UWVBFCQkxMDIJLyogZ2hwdCAqLworI2RlZmluZSBDTU5EX0dFVF9IT1NU X1BPUlRfU1RBVEUJMTAzCS8qIGdocHMgKi8KKyNkZWZpbmUgQ01ORF9HRVRfSE9TVF9BQ1RJVkVf RkM0UwkxMDQJLyogZ2hhZiAqLworI2RlZmluZSBDTU5EX0dFVF9IT1NUX1NQRUVECQkxMDUJLyog Z2hzcCAqLworI2RlZmluZSBDTU5EX0dFVF9IT1NUX0ZBQlJJQ19OQU1FCTEwNgkvKiBnaGZuICov CisjZGVmaW5lIENNTkRfR0VUX0hPU1RfU1RBVFMJCTEwNwkvKiBnaHN0ICovCisjZGVmaW5lIENN TkRfUkVTRVRfSE9TVF9TVEFUUwkJMTA4CS8qIHJoc3QgKi8KKyNkZWZpbmUgQ01ORF9JU1NVRV9I T1NUX0xJUAkJMTA5CS8qIGlobGkgKi8KKyNkZWZpbmUgQ01ORF9HRVRfU1RBUkdFVF9QT1JUX0lE CTEyMQkvKiBndHBpICovCisjZGVmaW5lIENNTkRfR0VUX1NUQVJHRVRfTk9ERV9OQU1FCTEyMgkv KiBndG5uICovCisjZGVmaW5lIENNTkRfR0VUX1NUQVJHRVRfUE9SVF9OQU1FCTEyMwkvKiBndHBu ICovCisjZGVmaW5lIENNTkRfR0VUX1JQT1JUX0xPU1NfVE1PCQkxNDEJLyogZ3BsdCAqLworI2Rl ZmluZSBDTU5EX1NFVF9SUE9SVF9MT1NTX1RNTwkJMTQyCS8qIHNwbHQgKi8KKyNkZWZpbmUgQ01O RF9HRVRfSU5JVElBTF9TSE9TVF9BVFRSSUIJMTYxCS8qIGdpaGEgKi8KKyNkZWZpbmUgQ01ORF9H RVRfSU5JVElBTF9TVEFSR0VUX0FUVFJJQgkxNjIJLyogZ2l0YSAqLworI2RlZmluZSBDTU5EX0dF VF9JTklUSUFMX1JQT1JUX0FUVFJJQgkxNjMJLyogZ2lwYSAqLworI2RlZmluZSBDTU5EX0dFVF9G VU5DVElPTl9URU1QTEFURQkxODEJLyogZ2Z0cCAqLworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKwlEZWZpbml0aW9uIG9mIFJpbmcgU3RydWN0dXJlcworICAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor CisjZGVmaW5lIERFRkFVTFRfQ0FOX1FVRVVFCTI1NgorI2RlZmluZSBWU0NTSV9NQVhfQ09NTUFO RF9TSVpFCTE2CisjZGVmaW5lIFNHX1RBQkxFU0laRQkJMzIKKworI2RlZmluZSBTQ1NJSUZfUkVR X09LQVkJCTAKKyNkZWZpbmUgU0NTSUlGX0JURlJJTkdfQlVTWQkxCisKKy8qIERlZmluaXRpb24g b2YKKyAqCXVuaW9uICB2c2NzaWlmX2Z0Yl9zcmluZ19lbnRyeSwKKyAqCXN0cnVjdCB2c2NzaWlm X2Z0Yl9zcmluZywKKyAqCXN0cnVjdCB2c2NzaWlmX2Z0Yl9mcm9udF9yaW5nLAorICoJc3RydWN0 IHZzY3NpaWZfZnRiX2JhY2tfcmluZywKKyAqCXZzY3NpaWZfZnRiX3NyaW5nX3QsCisgKgl2c2Nz aWlmX2Z0Yl9mcm9udF9yaW5nX3QsCisgKgl2c2NzaWlmX2Z0Yl9iYWNrX3JpbmdfdAorKi8KK3N0 cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0IHsKKwl1aW50NjRfdCBycWlkOworCXVpbnQzMl90IGNt bmQ7CisJdW5pb24geworCQkvKiBTQ1NJICovCisJCXN0cnVjdCBzY3NpaWZfZnRiX3JlcXVlc3Qg eworCQkJdWludDhfdCBjbW5kW1ZTQ1NJX01BWF9DT01NQU5EX1NJWkVdOworCQkJdWludDhfdCBj bWRfbGVuOworCQkJdWludDMyX3QgaWQsIGx1biwgY2hhbm5lbDsKKwkJCXVpbnQxNl90IHNjX2Rh dGFfZGlyZWN0aW9uOworCQkJdWludDE2X3QgdXNlX3NnOworCQkJdWludDE2X3QgcmVxdWVzdF9i dWZmbGVuOworLyoJCQlpbnQzMl90IHJldHJpZXM7Ki8KKwkJCWludDMyX3QgdGltZW91dF9wZXJf Y29tbWFuZDsKKwkJCXN0cnVjdCBzY3NpaWZfcmVxdWVzdF9zZWdtZW50IHsKKwkJCQlncmFudF9y ZWZfdCBncmVmOworCQkJCXVpbnQzMl90IG9mZnNldDsKKwkJCQl1aW50MzJfdCBsZW5ndGg7CisJ CQl9IHNlZ1tTR19UQUJMRVNJWkVdOworCQl9IHNjc2k7CisjaWZkZWYgQ09ORklHX1hFTl9GQwor CQkvKiBHZXRfc1RhcmdldF9Qb3J0X0lkICovCisJCS8qIEdldF9zVGFyZ2V0X05vZGVfTmFtZSAq LworCQkvKiBHZXRfc1RhcmdldF9Qb3J0X05hbWUgKi8KKwkJc3RydWN0IHsKKwkJCXUzMiBjaGFu bmVsOworCQkJdTMyIGlkOworCQl9IGd0cGksIGd0bm4sIGd0cG47CisKKwkJLyogR2V0X3JQb3J0 X0xvc3NfVG1vICovCisJCXN0cnVjdCB7CisJCQl1NjQgbm9kZV9uYW1lOworCQkJdTY0IHBvcnRf bmFtZTsKKwkJCXUzMiBwb3J0X2lkOworCQkJdTMyIHJvbGVzOworCQl9IGdwbHQ7CisKKwkJLyog U2V0X3JQb3J0X0xvc3NfVG1vICovCisJCXN0cnVjdCB7CisJCQl1NjQgbm9kZV9uYW1lOworCQkJ dTY0IHBvcnRfbmFtZTsKKwkJCXUzMiBwb3J0X2lkOworCQkJdTMyIHJvbGVzOworCQkJdTMyIHRp bWVvdXQ7CisJCX0gc3BsdDsKKyNlbmRpZgorCX0gdTsKK307CisKK3N0cnVjdCB2c2NzaWlmX2Z0 Yl9yZXNwb25zZSB7CisJdWludDE2X3Qgc3RhdHVzOworCXVuaW9uIHsKKwkJc3RydWN0IHNjc2lp Zl9mdGJfcmVzcG9uc2UgeworCQl9IHNjc2k7CisJfSB1OworfTsKKworREVGSU5FX1JJTkdfVFlQ RVModnNjc2lpZl9mdGIsIHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0LCBzdHJ1Y3QgdnNjc2lp Zl9mdGJfcmVzcG9uc2UpOworCisKKyNkZWZpbmUgU0NTSV9TRU5TRV9CVUZGRVJTSVpFIAk5Ngor CisvKiBEZWZpbml0aW9uIG9mCisgKgkJdW5pb24gIHZzY3NpaWZfYnRmX3NyaW5nX2VudHJ5LAor ICoJCXN0cnVjdCB2c2NzaWlmX2J0Zl9zcmluZywKKyAqCQlzdHJ1Y3QgdnNjc2lpZl9idGZfZnJv bnRfcmluZywKKyAqCQlzdHJ1Y3QgdnNjc2lpZl9idGZfYmFja19yaW5nLAorICoJCXZzY3NpaWZf YnRmX3NyaW5nX3QsCisgKgkJdnNjc2lpZl9idGZfZnJvbnRfcmluZ190LAorICoJCXZzY3NpaWZf YnRmX2JhY2tfcmluZ190CisqLworc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgeworCXVpbnQ2 NF90IHJxaWQ7CisJaW50MzJfdCAgcnNsdDsKKwl1bmlvbiB7CisJCS8qIFNDU0kgKi8KKwkJc3Ry dWN0IHNjc2lpZl9yZXNwb25zZSB7CisJCQl1aW50NjRfdCBzZW5zZV9sZW47CisJCQl1aW50OF90 IHNlbnNlX2J1ZmZlcltTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCQl9IHNjc2k7CisKKyNpZmRl ZiBDT05GSUdfWEVOX0ZDCisJCS8qIEdldF9Ib3N0X1BvcnRfSWQgKi8KKwkJc3RydWN0IHsKKwkJ CXUzMiBwb3J0X2lkOworCQl9IGdocGk7CisKKwkJLyogR2V0X0hvc3RfUG9ydF9UeXBlICovCisJ CXN0cnVjdCB7CisJCQllbnVtIGZjX3BvcnRfdHlwZSBwb3J0X3R5cGU7CisJCX0gZ2hwdDsKKwor CQkvKiBHZXRfSG9zdF9Qb3J0X1N0YXRlICovCisJCXN0cnVjdCB7CisJCQllbnVtIGZjX3BvcnRf c3RhdGUgcG9ydF9zdGF0ZTsKKwkJfSBnaHBzOworCisJCS8qIEdldF9Ib3N0X0FjdGl2ZV9GYzRz ICovCisJCXN0cnVjdCB7CisJCQl1OCBhY3RpdmVfZmM0c1tGQ19GQzRfTElTVF9TSVpFXTsKKwkJ fSBnaGFmOworCisJCS8qIEdldF9Ib3N0X1NQZWVkICovCisJCXN0cnVjdCB7CisJCQl1MzIgc3Bl ZWQ7CisJCX0gZ2hzcDsKKworCQkvKiBHZXRfSG9zdF9GYWJyaWNfTmFtZSAqLworCQlzdHJ1Y3Qg eworCQkJdTY0IGZhYnJpY19uYW1lOworCQl9IGdoZm47CisKKwkJLyogR2V0X0hvc3RfU1RhdHMg Ki8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3Mgc3RhdHM7CisJCX0g Z2hzdDsKKworCQkvKiBHZXRfc1RhcmdldF9Qb3J0X0lkICovCisJCXN0cnVjdCB7CisJCQl1MzIg cG9ydF9pZDsKKwkJfSBndHBpOworCisJCS8qIEdldF9zVGFyZ2V0X05vZGVfTmFtZSAqLworCQlz dHJ1Y3QgeworCQkJdTY0IG5vZGVfbmFtZTsKKwkJfSBndG5uOworCisJCS8qIEdldF9zVGFyZ2V0 X1BvcnRfTmFtZSAqLworCQlzdHJ1Y3QgeworCQkJdTY0IHBvcnRfbmFtZTsKKwkJfSBndHBuOwor CisJCS8qIEdldF9yUG9ydF9Mb3NzX1RtbyAqLworCQlzdHJ1Y3QgeworCQkJdTMyIHRpbWVvdXQ7 CisJCX0gZ3BsdDsKKworCQkvKiBTZXRfclBvcnRfTG9zc19UbW8gKi8KKwkJc3RydWN0IHsKKwkJ CXUzMiB0aW1lb3V0OworCQl9IHNwbHQ7CisjZW5kaWYKKwl9IHU7Cit9OworCitzdHJ1Y3QgdnNj c2lpZl9idGZfcmVzcG9uc2UgeworCXVuaW9uIHsKKwkJc3RydWN0IHNjc2lpZl9idGZfcmVzcG9u c2UgeworI2lmIDAKKwkJCXVpbnQ4X3QgYnVmW0JVRkZTSVpFXTsKKyNlbmRpZgorCQl9IHNjc2k7 CisJfSB1OworfTsKKworREVGSU5FX1JJTkdfVFlQRVModnNjc2lpZl9idGYsIHN0cnVjdCB2c2Nz aWlmX2J0Zl9yZXF1ZXN0LCBzdHJ1Y3QgdnNjc2lpZl9idGZfcmVzcG9uc2UpOworCisjZW5kaWYK --------_4718399500000000E8B0_MULTIPART_MIXED_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------_4718399500000000E8B0_MULTIPART_MIXED_--